为什么我的 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论证,自我引用似乎效果很好?这个dictarg是必不可少的吗?

答案1

在这种情况下,属性dict是可有可无的,因为直接定义函数并将其分配给dict函数的字典隐含属性,dict不再需要使用属性。

这种类型的函数称为匿名函数或编号函数

在您的示例中,您定义了两个ClassZ键,Change_author_name并且Print_author_name值是冯克雷夫

您可以验证它,使用功能():

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

可以看到,anumbered-function - 394已经被创建了,并且带有dict属性。

相关内容