Rebol开关并输入?

时间:2009-10-11 16:13:14

标签: rebol

为什么我必须使用switch将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"
    ]           
  ]

1 个答案:

答案 0 :(得分:1)

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