Яка мета оператора знака питання в Ruby?
Іноді це виглядає так:
assert !product.valid?
іноді це в if
конструкції.
Яка мета оператора знака питання в Ruby?
Іноді це виглядає так:
assert !product.valid?
іноді це в if
конструкції.
Відповіді:
Це угода про стиль коду; це вказує, що метод повертає булеве значення.
Знак питання є дійсним символом в кінці імені методу.
?
у Ruby (це потрійний оператор, який перетворює персонаж у його ціле число ASCII, використання в test
, в RegEx'es тощо), багато з яких висвітлено в інших відповідях тут.
isEmpty()
, isDigit()
і т. Д. У Ruby будуть написані ті самі методи empty?
, і digit?
це досить приємно IMO.
is
весь час використовую. Це може бути дуже заплутаним для кого - то наступаючому з Swift зі знаком питання там використовується для nullable
:)
Також примітка ?
разом із символом поверне ASCII код символу дляA
Наприклад:
?F # => will return 70
По черзі в рубіні 1,8 ви можете:
"F"[0]
або в рубіні 1.9:
"F".ord
Також зауважте, що ?F
повертає рядок "F"
, тому для того, щоб скоротити код, ви також можете використовувати ?F.ord
в Ruby 1.9, щоб отримати той же результат, що і "F".ord
.
'F'
У вашому прикладі це лише частина назви методу. У Ruby ви також можете використовувати знаки оклику у назвах методів!
Іншим прикладом запитальних знаків у Ruby може бути термінальний оператор.
customerName == "Fred" ? "Hello Fred" : "Who are you?"
У вашому прикладі
product.valid?
Це насправді виклик функції і викликає функцію з ім'ям valid?
. Деякі типи функцій "тест на стан" / булева функція мають знак питання як частину назви функції за домовленістю.
Можливо, варто зазначити, що ?
s дозволено лише в назвах методів, а не в змінних. У процесі вивчення Ruby я припускав, що ?
призначив булевий тип повернення, тому я спробував додати їх до змінних прапорців, що призводить до помилок. Це призвело до того, що я деякий час помилково вважав, що існує якийсь особливий синтаксис, що стосується ?
s.
Відповідно: Чому ім’я змінної не може закінчуватися на "?", А ім'я методу може?
Я вважаю, що це просто умова для речей, що є бурхливими. Трохи, як сказати " IsValid
".
Він також використовується в регулярних виразах, що означає "щонайменше одне повторення попереднього символу".
наприклад, регулярний вираз /hey?/
збігається з рядками " he
" і " hey
".
Це також загальна умова використовувати з першим аргументом методу тестування з тесту Kernel #
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"
.