JJA:
私は最近、スクリプトのデバッグかなりの時間を費やして、私は最終的に問題を発見したとき、それがあるため、このように見えたコードでした:
class Foo {
has $.bar;
method () {
# do stuff
$!.bar;
}
}
これは、問題はそれにあったが、$!.bar
どちらかとなっているべき、$!bar
または$.bar
。私はこれを取得します。
しかし、なぜこの死にませんか?
より詳細に本を見てみると、それはここでの問題のように見える私は(存在しない)メソッドを呼び出ししようとしているということであるbar
上$!
、この時点である、Nil
任意のエラーがされていないために。
私は実際に私が望む任意のメソッドを呼び出すことができますように、それが見えNil
、すべて静かに復帰し、彼らNil
のようなものを含めて、Nil.this-is-a-fake-method
とNil.reverse-entropy(123)
。
これは機能ですか?もしそうなら、根拠は何ですか?
ホッブズ:
これは、意図したとはい、文書化されています。以下のための見出しはNil
、「値の不在または良性の障害」であり、クラスのドキュメントは、言及します
上の任意のメソッド呼び出し
Nil
が存在しない、その結果、任意の添字操作は、成功すると戻ります方法のNil
。say Nil.ITotallyJustMadeThisUp; # OUTPUT: «Nil» say (Nil)[100]; # OUTPUT: «Nil» say (Nil){100}; # OUTPUT: «Nil»
あらすじ2つの状態「上の任意の未定義のメソッド呼び出しNil
を返すNil
ように、Nil
上のメソッドの呼び出しチェーンダウン伝搬するが、同様に任意の添字操作Nil
を返すNil
意思のような表現が可能にしているように見えるので、」$foo.Bar()[0].Baz()
のためのチェックを必要とせずにNil
、すべてのステップ、または特別な「無記号セーフで「メソッド呼び出しと添字演算子。