Skip to content

Instantly share code, notes, and snippets.

@noqisofon
Last active September 9, 2023 00:04
Show Gist options
  • Save noqisofon/18f5dc8e07fff07f296e5b1569a056ec to your computer and use it in GitHub Desktop.
Save noqisofon/18f5dc8e07fff07f296e5b1569a056ec to your computer and use it in GitHub Desktop.
( ノ╹◡◡╹)ノ Nil を判定したいよなー、俺もなー

Nil かどうかを判定したさがある

以下のようなコードは「あー、にるい」が出力されそうですが、実際に実行してみると出力されません。

my $puyo = Nil;
say 'あー、にるい' if $puyo ~~ Nil;

なぜこうなるのかをこれから解説します。

例えば、以下のように変数を宣言すると、 $puyo のデフォルト値は (Any) となります。

my $puyo = Nil;

これは、以下のように宣言したのと等価です:

my $puyo is default((Any)) = Nil;

Nil は値が存在しないことを表します。

デフォルト値が (Any) になっている変数に Nil を設定すると、変数の値は (Any) になります。 ここで、 (Any)Nil とは異なる値なので、 $puyo ~~ NilFalse を返します。

なので、デフォルト値を Nil にすれば、最初のコードがうまくいきそうに思えます。

my $puyo is default(Nil) = Nil;
say 'あー、にるい' if $puyo ~~ Nil;

実行してみると、出力されます。やりました。

$ raku ./feeling-nilly001.raku
あー、にるい

でも、いつも is default(Nil) を指定するのは面倒です。 そこで、ある変数の中に無効な値が入っているかどうかを調べるため、 .defined メソッドを使います。

my $puyo = Nil;
say 'あー、にるい' unless $puyo.defined;

また、ジャンクションを使うという手もあります:

my $puyo = Nil;
say 'あー、にるい' if Nil ~~ one($puyo);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment