私は無記号上の任意のメソッドを呼び出すことができ、これは間違っていると感じています

JJA:

私は最近、スクリプトのデバッグかなりの時間を費やして、私は最終的に問題を発見したとき、それがあるため、このように見えたコードでした:

class Foo {
    has $.bar;
    method () {
        # do stuff
        $!.bar;
    }
}

これは、問題はそれにあったが、$!.barどちらかとなっているべき、$!barまたは$.bar私はこれを取得します。

しかし、なぜこの死にませんか

より詳細に本を見てみると、それはここでの問題のように見える私は(存在しない)メソッドを呼び出ししようとしているということであるbar$!、この時点である、Nil任意のエラーがされていないために。

私は実際に私が望む任意のメソッドを呼び出すことができますように、それが見えNil、すべて静かに復帰し、彼らNilのようなものを含めて、Nil.this-is-a-fake-methodNil.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、すべてのステップ、または特別な「無記号セーフで「メソッド呼び出しと添字演算子。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=30186&siteId=1