5

我正在尝试比较字符以查看它们是否匹配。我不知道为什么它不起作用。我期待true输出,但我错了。

character: "a"
word: "aardvark"

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

2 回答 2

5

所以"a"在 Rebol 中不是一个字符,它实际上是一个字符串。

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

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

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

字符串不是一系列单字符 STRING!,而是一系列 CHAR!。因此,您想要的是:

character: #"a"
word: "aardvark"

(first word) = character ;-- true!

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

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

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

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

于 2014-01-31T23:26:33.567 回答
4

我建议在这种情况下,当事情开始以与您预期不同的方式表现时,使用probetype?. 这将帮助您了解正在发生的事情,并且您可以在小段代码上使用交互式 Rebol 控制台。

例如:

>> character: "a"

>> word: "aardvark"

>> type? first word
== char!

>> type? character
== string!

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

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

于 2014-02-01T11:02:20.913 回答