Сравнение персонажей в Реболе 3
Я пытаюсь сравнить символы, чтобы увидеть, совпадают ли они. Я не могу понять, почему это не работает. Я ожидаю true
на выходе, но я получаю ложь.
character: "a"
word: "aardvark"
(first word) = character ; expecting true, getting false
2 ответа
Так "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! S, это серия CHAR!. Итак, что вы хотите, поэтому:
character: #"a"
word: "aardvark"
(first word) = character ;-- true!
(Примечание: Интересно, что двоичные преобразования как одной строки символов, так и этого символа будут эквивалентны:
>> to binary! "μ"
== #{CEBC}
>> to binary! #"μ"
== #{CEBC}
... это байтовые представления UTF-8.)
Я рекомендую в таких случаях, когда все начинает вести себя не так, как вы ожидали, использовать такие вещи, как probe
а также type?
, Это поможет вам понять, что происходит, и вы можете использовать интерактивную консоль Rebol для небольших фрагментов кода.
Например:
>> character: "a"
>> word: "aardvark"
>> type? first word
== char!
>> type? character
== string!
Таким образом, вы действительно можете увидеть, что первый элемент word
это символ #"а", а ваш character
это строка! "А". (Хотя я согласен с @HostileFork, что сравнение строки длины 1 и символа одинаково для человека.)
Другие места, где вы можете проверить вещи: http://tryrebol.esperconsultancy.nl/ или в чате с RebolBot