Как Perl 6 оценивает правдоподобие?

В чтении о Perl 6 я вижу, что функция возвещена о, где Вы больше не должны делать:

return "0 but true";

... но может вместо этого сделать:

return 0 but True;

Если это так, как истина работает в Perl 6? В Perl 5 это было довольно просто: 0, "", и undef ложь, все остальное верно.

Каковы правила в Perl 6 когда дело доходит до булева контекста?

26
задан Elizabeth Mattijsen 27 November 2019 в 19:18
поделиться

5 ответов

Таким образом для объединения то, что я думаю, чтобы быть лучшим из общих ответов:

при оценке переменной в булевом контексте, его .true () метод называют. Значение по умолчанию .true () метод, используемый объектом, делает Perl < с 5 стилями; 0, "", undef> проверка значения объекта, но когда Вы говорите, "но Верный" или, "но Ложь", этот метод переопределяется с тем, который не смотрит на значение просто, возвращает константу.

Каждый мог мыслимая запись истинное () метод, который, скажем, возвратил true, когда значение было даже и ложь, когда это было нечетно.

3
ответ дан brian d foy 28 November 2019 в 07:08
поделиться

Perl 6 оценивает истину теперь путем задавания объекту вопроса вместо того, чтобы смотреть на его значение. Значение не является объектом. Это - что-то, что я любил о других объективных языках и буду рад иметь в Perl: Я добираюсь, чтобы решить, как объект отвечает и может видоизменить это. Как ysth сказал, Вы могли сделать это в Perl 5 с перегрузкой, но я всегда чувствую, что должен промыть руки после выполнения его тот путь.:)

, Если Вы не делаете ничего для изменения этого, Perl 6 ведет себя таким же образом как Perl 5, таким образом, Вы получаете наименьшее количество суммы удивления.

17
ответ дан Andrew Grimm 28 November 2019 в 07:08
поделиться

Тест Truthness просто звонит .true метод на объекте, таким образом, "соединение в" операции $stuff but True просто (среди прочего) переопределения тот метод.

Это определяется в S02, обычно перечислимые типы (которых Bool - один), описаны в S12.

11
ответ дан moritz 28 November 2019 в 07:08
поделиться

См. Резюме 12: Роли .

правила являются тем же, но, "но" копирует 0 и применяет роль к копии, которая заставляет его быть верным в булевом контексте.

можно сделать то же самое с перегрузкой в Perl 5.

11
ответ дан brian d foy 28 November 2019 в 07:08
поделиться

По словам O'Reilly Perl 6 и Основы Попугая , ложь 0, undef, пустая строка, и оценивает отмеченный как ложь . верный все остальное.

кроме того, Perl 6 имеет и примитивный булев тип и при наличии Истины и лжи роли , который любое значение может смешать в (таким образом, у Вас может быть "0, но Истинное" значение или "1, но Ложь" один, например, или ложный список, содержащий элементы или истинный список, это пусто).

См. http://www.mail-archive.com/macosx@perl.org/msg09930.html

6
ответ дан brian d foy 28 November 2019 в 07:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: