Rebol переключатель и тип? - PullRequest
1 голос
/ 11 октября 2009

Почему я должен приводить typeof к строке с помощью switch, чтобы он работал?

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

  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"
    ]           
  ]

1 Ответ

1 голос
/ 11 октября 2009
switch type?/word :optional [
    word! [ print "word" ]
    string! [ print "string" ]
]

OR

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

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

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

...