【问题标题】:Comparing characters in Rebol 3比较 Rebol 3 中的角色
【发布时间】:2014-01-31 23:15:42
【问题描述】:

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

character: "a"
word: "aardvark"

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

【问题讨论】:

    标签: unicode character rebol rebol3 codepoint


    【解决方案1】:

    所以 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 中讨论的这些和其他问题
    • 小心对字符串使用动作!数据类型。 >> 选择“测试”2 == #“e”
    【解决方案2】:

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

    例如:

    >> character: "a"
    
    >> word: "aardvark"
    
    >> type? first word
    == char!
    
    >> type? character
    == string!
    

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

    您可以测试的其他地方是http://tryrebol.esperconsultancy.nlRebolBot 的聊天室

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-07
      • 2021-01-30
      • 1970-01-01
      • 1970-01-01
      • 2018-11-12
      • 2021-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多