【发布时间】:2014-01-31 23:15:42
【问题描述】:
我正在尝试比较字符以查看它们是否匹配。我不知道为什么它不起作用。我期待 true 的输出,但我得到了错误。
character: "a"
word: "aardvark"
(first word) = character ; expecting true, getting false
【问题讨论】:
标签: unicode character rebol rebol3 codepoint
我正在尝试比较字符以查看它们是否匹配。我不知道为什么它不起作用。我期待 true 的输出,但我得到了错误。
character: "a"
word: "aardvark"
(first word) = character ; expecting true, getting false
【问题讨论】:
标签: unicode character rebol rebol3 codepoint
所以 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 字节表示。)
【讨论】:
= 运算符而言,如果单个字符串被视为等同于字符,这将是有帮助的。更严格的 == 可能仍然返回 false。 the chat room 中讨论的这些和其他问题
我建议在这种情况下,当事情开始以与您预期不同的方式表现时,使用probe 和type? 之类的东西。这将帮助您了解正在发生的事情,并且您可以在小段代码上使用交互式 Rebol 控制台。
例如:
>> character: "a"
>> word: "aardvark"
>> type? first word
== char!
>> type? character
== string!
所以你确实可以看到word 的第一个元素是一个字符#"a",而你的character 是字符串! “一种”。 (尽管我同意@HostileFork 的观点,即比较长度为 1 的字符串和一个字符对于人类来说是相同的。)
您可以测试的其他地方是http://tryrebol.esperconsultancy.nl 或RebolBot 的聊天室
【讨论】: