2016-09-02 14 views
0

도트 연산자로 호출 할 수 있도록 표준 문자열 클래스의 일부 메서드를 재정의 할 수 있습니까? 예를 들어 는 :도트 연산자를 사용한 lua 문자열 메소드 호출

테이블 또는 전체 유저 데이터하지 않은 유형의
s = "hello world" 
print(s.len()) 
+0

'call'을 metatable로 설정할 수 있지만 포함하는 객체에 문자열을 저장해야합니다. 그러나 내가 옳다면 끈 자체가 아닙니다. '# '을 사용하는 것이 더 쉽습니다. – Jakuje

+0

질문의 제목과 질문의 내용 사이에 어떤 연결 고리가 보이지 않습니다. –

+0

귀하의 질문이 명확하지 않습니다 - 귀하의 수정 후 제목과 본문이 일치하지 않습니다. 자체 참조 메소드는's.len (s)'을 쓰고 싶지 않으면 콜론 표기법 ('s : len()')으로 호출됩니다. [Programming in Lua : OOP] (http://www.lua.org/pil/16.html)을 읽으셨습니까? – Oka

답변

1

, 각 유형는 메타 테이블을 가지고있다. 즉, 자체 메타 테이블을 갖는 각각의 개별 문자열보다는 모든 문자열이 동일한 메타 테이블을 공유합니다.

기본적으로 Lua 표준 문자열 라이브러리는이 메타 테이블을 string 테이블에 할당합니다. 원하는 경우 string에 항목을 추가 할 수 있습니다.

허용됨, len은 의미가 없으므로 계산하려면 #입니다. 문자열을 첫 번째 매개 변수로 전달하려면 : 호출 구문을 사용해야합니다.