![追加の`dict`パラメータ定義なしで私のdictメソッドが正しく機能するのはなぜですか? [精力]](https://linux33.com/image/70956/%E8%BF%BD%E5%8A%A0%E3%81%AE%60dict%60%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E5%AE%9A%E7%BE%A9%E3%81%AA%E3%81%97%E3%81%A7%E7%A7%81%E3%81%AEdict%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%8C%E6%AD%A3%E3%81%97%E3%81%8F%E6%A9%9F%E8%83%BD%E3%81%99%E3%82%8B%E3%81%AE%E3%81%AF%E3%81%AA%E3%81%9C%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E7%B2%BE%E5%8A%9B%5D.png)
私のコードは次のとおりです
: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_name
値Print_author_name
は次のとおりです。フォンクレープ。
以下を使用して確認できます。機能():
:function ClassZ.Print_author_name
function 394() dict
1 echo self.author
endfunction
ご覧のとおり、aがnumbered-function - 394
作成され、dict
属性があります。