Какова цель оператора вопроса в Ruby?Что означает оператор «знак вопроса» в Ruby?
Иногда кажется, как это:
assert !product.valid?
иногда в if
конструкции.
Какова цель оператора вопроса в Ruby?Что означает оператор «знак вопроса» в Ruby?
Иногда кажется, как это:
assert !product.valid?
иногда в if
конструкции.
Это соглашение о стиле кода; это указывает, что метод возвращает логическое значение.
Значок вопроса является допустимым символом в конце имени метода.
Спасибо, но означает ли это, что это означает только _logic_ или могут быть побочные эффекты? Забавно, как это хак по типичным языкам с типом возврата в коде. – Jason
В этом случае это строго соглашение об именовании метода. Не существует принудительного ввода логического возвращаемого значения. Просто потому, что имя метода заканчивается знаком вопроса, это не значит, что метод * должен * возвращать логическое ... но он определенно должен * возвращать логическое значение. Однако существует несколько других видов использования '?' В Ruby (это тройной оператор, преобразование символа в его целое ASCII, использование в 'test', в RegEx'es и т. Д.), Многие из которых описаны в других ответах Вот. –
@Jason FYI, даже строго типизированные языки имеют подобные соглашения. Например, в Java-методах, возвращающих логическое значение, часто префикс «is», как в 'isEmpty()', 'isDigit()' и т. Д. В Ruby те же методы будут написаны 'empty?' И 'digit? ', что немного лучше IMO. – Ajedi32
Это соглашение в Ruby, что методы, возвращающие логические значения, заканчиваются знаком вопроса. Для этого нет никакого значения.
Я считаю, что это просто соглашение для вещей, которые являются логическими. Немного нравится говорить «IsValid
».
краткий и замечательный комментарий специально« Немного похоже на высказывание «IsValid» –
В вашем примере
product.valid?
Это на самом деле вызов функции и вызывает функцию с именем valid?
. Некоторые типы «test for condition»/boolean функции имеют знак вопроса как часть имени функции по соглашению.
answer.gsub! (/ Function /, 'method') –
Хороший комментарий ... lolz –
В вашем примере это всего лишь часть имени метода. В Ruby вы также можете использовать восклицательные знаки в именах методов!
Другим примером вопросительных знаков в Ruby будет тернарный оператор.
customerName == "Fred" ? "Hello Fred" : "Who are you?"
Чтобы расшифровать ответ Andy, вы также увидите такие вещи, как: customerName == user.logged_in?? User.name: «Кто вы?» Обратите внимание на знак двойного вопроса –
Он также используется в регулярных выражениях, что означает «не более одного повторения предыдущего символа»
, например, регулярное выражение /hey?/
совпадения со строками «he
» и «hey
».
отметить также ?
наряду с характером, возвращает код ASCII символов для A
Например:
?F # => will return 70
попеременно в Ruby 1.8 вы можете сделать:
"F"[0]
или в рубине 1,9:
"F".ord
Также обратите внимание, что ?F
вернет строку "F"
, поэтому, чтобы сделать код короче, вы также можете использовать ?F.ord
в Ruby 1.9, чтобы получить тот же результат, что и "F".ord
.
Это также общее соглашение для использования с первым аргументом метода test из Kernel#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
Это не связано с 'test','? d' является ярлыком для '' d "'. ' test' принимает в качестве первого аргумента строку с одним символом, поэтому вы можете вызвать ее с помощью «test? d», «dev» или «test» d »,«/dev ». – bfontaine
Может быть, стоит отметить, что? S разрешены только в именах методов, а не переменные.В процессе обучения Ruby я предполагал это? обозначил логический тип возврата, поэтому я попытался добавить их к переменным флага, что привело к ошибкам. Это привело к тому, что я ошибочно полагал, что существует некоторый специальный синтаксис с участием.
Соответствующие: Why can't a variable name end with `?` while a method name can?
Вопросительный знак в конце функции не является оператором, это обычный символ. Вопросительный знак вместе с двоеточием является тернарным условным оператором. Вопросительный знак сам по себе является унарным оператором котировки. См. Http://stackoverflow.com/questions/16641205/what-does-the-unary-question-mark-operator-do –