こんばんは
Perl 6 Advent Calendar 2015の15日目です。(遅刻)
はじめに
use v6;
if !() {
print "()はFalseです\n";
}
if !'' {
say "''はFalseです";
}
if !0 {
put '0はFalseです';
}
しかし
but
キーワードを使うことでTrue
として扱うことができます。
use v6;
my $空文字 = '' but role { method Bool { True } };
my $ゼロ = 0 but True;
say ? $空文字; #=> True
say so $ゼロ; #=> True
でも
配列やハッシュはだめなんだろうか。
use v6;
my @小かっこ = () but True;
my %中カッコ = {} but True;
say @小かっこ.Bool; #=> False
say %中カッコ.so; #=> False
定数constant
キーワードを付けるとTrue
になるけど…原理がわかったら更新します…1
use v6;
my constant @小かっこ = () but True;
my constant %中カッコ = {} but True;
say @小かっこ.Bool; #=> True
say %中カッコ.so; #=> True
おまけ
逆に、普段はTrue
になる値をFalse
扱いしたい時にも使えます
use v6;
my Str constant $返事 = 'ぽんぽこタヌキさん' but False ;
$返事.say if $返事.not ; #=> ぽんぽこタヌキさん
おわりです。
参考と注釈
- Perl6の Context Forcing Operators
- perl - にも真偽値は存在する - 404 Blog Not Found
- Day 19 – False truth - Perl 6 Advent Calendar 2010
-
おしえてえらいひと。 ↩