Какова цель оператора вопросительного знака в Ruby?
Иногда это выглядит так:
assert !product.valid?
иногда это в конструкции if
.
Какова цель оператора вопросительного знака в Ruby?
Иногда это выглядит так:
assert !product.valid?
иногда это в конструкции if
.
Это соглашение о стиле кода; это указывает, что метод возвращает логическое значение.
Значок вопроса является допустимым символом в конце имени метода.
Также обратите внимание, что ?
вместе с символом вернет код символа ASCII для A
Например:
?F # => will return 70
Альтернативно в рубине 1.8 вы можете:
"F"[0]
или в рубине 1.9:
"F".ord
Также обратите внимание, что ?F
вернет строку "F"
, поэтому, чтобы сделать код короче, вы также можете использовать ?F.ord
в Ruby 1.9, чтобы получить тот же результат, что и "F".ord
.
Это соглашение в Ruby, что методы, возвращающие логические значения, заканчиваются вопросительным знаком. Нет больше значения для этого, чем это.
В вашем примере это просто часть имени метода. В Ruby вы также можете использовать восклицательные знаки в именах методов!
Другим примером вопросительных знаков в Ruby будет тернарный оператор.
customerName == "Fred" ? "Hello Fred" : "Who are you?"
В вашем примере
product.valid?
На самом деле это вызов функции и вызывает функцию с именем valid?
. Некоторые типы "test for condition" /boolean функции имеют знак вопроса как часть имени функции по соглашению.
Возможно, стоит указать, что? s разрешены только именами методов, а не переменными. В процессе обучения Ruby я предполагал это? обозначил логический тип возврата, поэтому я попытался добавить их к переменным флага, что привело к ошибкам. Это привело к тому, что я ошибочно полагал, что существует некоторый специальный синтаксис, связанный с .s.
Релевантно: Почему имя переменной не может заканчиваться символом`? `, а имя метода может?
Я считаю, что это просто соглашение для вещей, которые являются логическими. Немного нравится говорить "IsValid
".
Он также используется в регулярных выражениях, что означает "не более одного повторения предыдущего символа"
например, регулярное выражение /hey?/
соответствует строкам "he
" и "hey
".
Это также общепринятое соглашение для использования с первым аргументом метода test из Ядро # тест
irb(main):001:0> test ?d, "/dev" # directory exists?
=> true
irb(main):002:0> test ?-, "/etc/hosts", "/etc/hosts" # are the files identical
=> true