Unicode 比较Rebol 3中的字符
我试着比较角色,看他们是否匹配。我不明白为什么它不起作用。我期望输出的Unicode 比较Rebol 3中的字符,unicode,character,rebol,rebol3,codepoint,Unicode,Character,Rebol,Rebol3,Codepoint,我试着比较角色,看他们是否匹配。我不明白为什么它不起作用。我期望输出的true,但我得到的是false character: "a" word: "aardvark" (first word) = character ; expecting true, getting false 所以Rebol中的a不是一个字符,它实际上是一个字符串 单个unicode字符是它自己的独立类型,具有自己的文字语法,例如#“A”。例如,它可以从整数来回转换!要获取单个字母字符串“a”无法获取的a,请执行以下操作
true
,但我得到的是false
character: "a"
word: "aardvark"
(first word) = character ; expecting true, getting false
所以Rebol中的a不是一个字符,它实际上是一个字符串
单个unicode字符是它自己的独立类型,具有自己的文字语法,例如#“A”
。例如,它可以从整数来回转换!要获取单个字母字符串“a”
无法获取的a,请执行以下操作:
>> to integer! #"a"
== 97
>> to integer! "a"
** Script error: cannot MAKE/TO integer! from: "a"
** Where: to
** Near: to integer! "a"
字符串不是由一个字符串组成的序列!s、 这是一系列的字符!。因此,你想要的是:
character: #"a"
word: "aardvark"
(first word) = character ;-- true!
(注意:有趣的是,单个字符串和该字符的二进制转换是等效的:
…这些是UTF-8字节表示。)我建议在这种情况下,当事情开始以不同于您预期的方式运行时,使用
探测和类型?
之类的方法。这将帮助您了解正在发生的事情,并且您可以在小块代码上使用交互式Rebol控制台
例如:
>> character: "a"
>> word: "aardvark"
>> type? first word
== char!
>> type? character
== string!
因此,您确实可以看到word
的第一个元素是字符#“a”,而您的字符
是字符串!“a”。(尽管我同意@HostileFork的观点,将长度为1的字符串与字符进行比较对人类来说是一样的。)
我个人认为,至少对于基线=
操作符来说,如果单个字符串被视为等同于字符,那么它会很有帮助。更严格的==
仍可能返回false。中讨论的这些和其他问题在字符串上使用操作时要小心!数据类型。>>选择“测试”2=#“e”
>> character: "a"
>> word: "aardvark"
>> type? first word
== char!
>> type? character
== string!