Сравнение персонажей в Реболе 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

Другие вопросы по тегам