Ruby: использование? в случае если - PullRequest
2 голосов
/ 10 января 2020

В Ruby, в чем разница использования "?" внутри, если условие?

if object.property

или

if object.property?

Я нашел использование их обоих в методе, не понимая разницы

Большое спасибо

Ответы [ 2 ]

5 голосов
/ 10 января 2020

? может быть частью имени функции. Это не специальный оператор, если он идет в конце имени метода. Также ! также может быть частью имени метода. Итак, что делает эта строка, так это вызывает методы object.property и object.property?.

Каковы ограничения для имен методов в Ruby?

0 голосов
/ 10 января 2020

В Ruby, foo.bar - это синтаксис для отправки сообщения . Сначала он оценивает выражение foo (которое либо разыменовывает локальную переменную, либо сообщение без получателя отправляет неявному получателю self), а затем отправляет сообщение bar полученному объекту.

Один раз вы знаете, как выглядит отправка сообщения в Ruby, легко увидеть, что делает object.property?: сначала он вычислит выражение object (которое либо разыменовывает локальную переменную, либо отправляет сообщение без получателя, отправленное неявному получателю self) и затем отправьте сообщение property? полученному объекту.

Итак, в чем разница между ними? Ну, первый отправляет сообщение property, а второй отправляет сообщение property?. Это ничем не отличается от того, если бы первый был object.foo, а второй - object.bar.

Имена методов, заканчивающиеся на ?, обычно используются для предиката методов, то есть для методов, которые задают вопрос «Да / Нет». Хороший пример: Numeric#zero?.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...