追加の`dict`パラメータ定義なしで私のdictメソッドが正しく機能するのはなぜですか? [精力]

追加の`dict`パラメータ定義なしで私のdictメソッドが正しく機能するのはなぜですか? [精力]

私のコードは次のとおりです

:let ClassZ = {'author': "Juchen.Zeng"}
:function ClassZ.Print_author_name()
:    echo self.author
:endfunction

:function ClassZ.Change_author_name(arg1)
:    let self.author = a:arg1
:endfunction

:call ClassZ.Print_author_name()

Juchen.Zeng

:call ClassZ.Change_author_name('MarioLuisGarcia')
:call ClassZ.Print_author_name()

MarioLuisGarcia

vimの公式文書には次のように記載されています。


    :function uk2nl.translate(line) dict
    :  return join(map(split(a:line), 'get(self, v:val, "???")'))
    :endfunction

まず試してみましょう。

    :echo uk2nl.translate('three two five one')
    drie twee ??? een

最初に目立つ特別な点は、「:function」行の末尾にある「dict」です。これは関数が辞書で使用されていることを示します。これにより、「self」ローカル変数が対応する辞書を参照します。


追加の引数なしで私の例でdict自己参照がうまく機能しているように見えるのはなぜですか?このdict引数は必須ですか?

答え1

この場合、dict関数を直接定義して関数dictの事前暗黙的な属性に割り当てると、属性を使用する必要がdictないため、属性はオプションです。

このタイプの関数を呼び出します。匿名または番号付き関数

ClassZあなたの例では、2つのキーを定義し、Change_author_namePrint_author_nameは次のとおりです。フォンクレープ

以下を使用して確認できます。機能():

:function ClassZ.Print_author_name
   function 394() dict
1  echo self.author
   endfunction

ご覧のとおり、aがnumbered-function - 394​​作成され、dict属性があります。

関連情報