2014-09-09 2 views
2
format = function(&Return, Length, Format, ...) 
    Return = string.format(Format, ...); 
    Return = string.sub(Format, 0, Length); 
    return 1; 
end 

local Test; 

format(Test, 12, "Hello world %s! This is a test.", "Hello World"); 

print(Test); 

"Hello world!" 함수에 의해 리턴되지 않고 매개 변수에 의해 리턴됩니다. 당신은 그냥 설정, Return에 접근하지 않는루아의 반환 매개 변수

+0

당신은 루아 함수 목록 (즉, 0 이상의 값)을 반환 것을 알고, 바로? –

+0

예 다중 변수를 반환 할 수 있음을 알고 있습니다. 응답 해 주셔서 감사합니다. moteus가 내 문제에 대한 해답을 갖고 있습니다. – SkittlesAreFalling

답변

6

당신은 당신의 예에서

local function Pointer() 
    return setmetatable({},{ 
    __tostring = function(self) return self.value end 
    }) 
end 

format = function(Return, Length, Format, ...) 
    Return.value = string.sub(Format, 0, Length) 
    return 1 
end 

local Test = Pointer() 

format(Test, 12, "Hello world %s! This is a test.", "Hello World") 

print(Test) 
+0

좋은 트릭! 그러나이 멋진 구문은'print'가 자동으로'__tostring' 메타 메소드를 호출하기 때문에 작동한다는 것을 언급해야합니다. 다른 대부분의 경우에는 결과에 접근하기 위해'Test.value'라고 써야합니다. – siffiejoe

+0

우리는 metamethod __len (value = #Test) – moteus

+0

moteus와 프록시를 사용할 수 있습니다. 내 친구에게 금메달을 줘야하지만, 불행히도 당신에게 줄 수있는 것은 내 감사입니다. – SkittlesAreFalling

1

뭔가를 할 수 있습니다 또한 반환 값 '1'을 사용하고 있지 않습니다. 그래서 왜 이렇게하지 :

format = function(Length, Format, ...) 
    local Return = string.format(Format, ...) 
    Return = string.sub(Format, 0, Length) 
    local status = 1 -- i'm guessing this is a status code of sorts 
    return Return, status 
end 

local Test, stat = format(12, "Hello world %s! This is a test.", "Hello World") 

코드 리뷰 노트 :

  • 당신이 사방에 세미콜론과 함수 매개 변수로 & 반환을 사용하고 있다는 사실에 기초, 당신은 여전히 ​​"생각 날 것으로 보인다 C ". 하지마. 루아에서 프로그램 할 때 루아를 생각해보십시오. 루아에서는 여러 값을 반환 할 수 있기 때문에 세미콜론을 사용할 필요가 없으므로 불필요한 기호로 코드를 왜곡하십시오.
  • 나는 함께 모든 포맷 구성 요소를 유지하는 것이 좋습니다, 게다가이 방법은 쉽게 확장 할 수 있습니다 :

    local Test, stat = format("Hello world %s! This is a test.", 
             ["Hello World", 12], ['Joe', 5]) 
    
+0

답장을 보내 주셔서 감사합니다. 그러나 moteus는 제 문제에 대한 최선의 해결책을 가지고 있습니다. - 옵션이기 때문에 세미콜론을 사용하고 대부분의 프로그래밍 언어는 세미콜론을 사용하여 명령문을 끝냅니다. 그래서 나는 자연스럽게 그것을한다. (나는 문제를 가지고있다! = 대신에 ~ = and || && 대신에 'or'and 'so ...) – SkittlesAreFalling