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!