比较Rebol 3中的字符

时间:2014-01-31 23:15:42

标签: unicode character rebol rebol3 codepoint

我正在尝试比较字符以查看它们是否匹配。我无法弄清楚为什么它不起作用。我期待输出true,但我变得虚假。

character: "a"
word: "aardvark"

(first word) = character ; expecting true, getting false

2 个答案:

答案 0 :(得分:5)

因此,Rebol中的"a"不是一个字符,它实际上是一个字符串。

单个unicode字符是它自己的独立类型,具有自己的文字语法,例如: #"a"。例如,它可以从INTEGER来回转换!得到code point,单字母字符串"a"不能:

>> to integer! #"a"
== 97

>> to integer! "a"  
** Script error: cannot MAKE/TO integer! from: "a"
** Where: to
** Near: to integer! "a"

字符串不是一系列单字符STRING!s,它是一系列CHAR!。所以你想要的是:

character: #"a"
word: "aardvark"

(first word) = character ;-- true!

(注意:有趣的是,单个字符串和该字符的二进制转换将是等效的:

>> to binary! "μ"
== #{CEBC}

>> to binary! #"μ"
== #{CEBC}

...这些是UTF-8字节表示。)

答案 1 :(得分:4)

对于像probetype?这样的事情,我推荐像这样的情况,当事情开始以不同于预期的方式行事时。这将帮助您了解正在发生的事情,并且您可以在小块代码上使用交互式Rebol控制台。

例如:

>> character: "a"

>> word: "aardvark"

>> type? first word
== char!

>> type? character
== string!

所以你确实可以看到word的第一个元素是一个字符#“a”,而你的character就是字符串! “一个”。 (虽然我同意@HostileFork,比较一个长度为1的字符串和一个字符对于人类来说是相同的。)

您可以测试内容的其他地方http://tryrebol.esperconsultancy.nl或聊天室RebolBot