2009-10-11 3 views
1

Зачем мне прикладывать typeof к строке с помощью переключателя, чтобы она работала?Револьверный переключатель и тип?

Это не работает:

typeof: type? get 'optional 
    switch typeof [ 
    word! [ 
     print "word" 
    ] 
    string! [ 
     print "string" 
    ]   
    ] 

Это работает:

typeof: type? get 'optional 
    switch to-string typeof [ 
    "word" [ 
     print "word" 
    ] 
    "string" [ 
     print "string" 
    ]   
    ] 
+0

REBOL - простой язык, но, вопреки утверждениям Карла Сассенрата, это не обязательно легкий язык. :) Просто! = Легко. –

+0

Тогда скажем, что это элегантный язык :) –

ответ

1
switch type?/word :optional [ 
    word! [ print "word" ] 
    string! [ print "string" ] 
]

ИЛИ

switch type? :optional reduce [ 
    word! [ print "word" ] 
    string! [ print "string" ] 
]

Причина заключается в том, что REBOL не уменьшает (» оценить ") случаи в инструкции switch. Без уточнения /word функция type? возвращает datatype!, но оператор switch пытается сопоставить это с word!, и он терпит неудачу.

Я понимаю, что это может ввести в заблуждение, поэтому лучше всего либо преобразовать тип в строку (как и вы), либо использовать одну из двух идиом, которые я предложил. Я предпочитаю первый, используя type?/word.

+0

Большое спасибо, вы, конечно, ребро-гуру: я не знал/слово существовало :) –

+0

Спасибо! Я даже не знал о '/ word', пока полезный комментатор не указал мне на мой блог. :) –

Смежные вопросы