추가 `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귀하의 예에서는 두 개의 키를 정의 Change_author_name하고 Print_author_name값은 다음과 같습니다.폰 크레이프.

다음을 사용하여 확인할 수 있습니다.기능():

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

보시다시피 a가 numbered-function - 394생성되었으며 dict속성이 있습니다.

관련 정보