2013-12-18 3 views
2

루비 모션은 루비 2.0 키워드 인수를 지원합니까? 나는이 방법이 있으며이 오류가 발생합니다 : 나는 루비의 다음 버전을 사용하고 있습니다 syntax error, unexpected tSTRING_BEG, expecting tIDENTIFIER루비 2.0 키워드 인수 Rubymotion 지원

def foo(message, offset: 20) 
    # Do something 
end 

을했지만, 제대로 동작 나던?

$ ruby -v 
vruby 2.0.0p353 (2013-11-22 revision 43784) [x86_64-darwin13.0.2] 
+0

문제는 변수 이름 대신 값을 입력한다는 것입니다. – FluffyJack

답변

0

예.

the Ruby Motion developer center docs을 참조로 사용하면 다음과 같은 결과가 나타납니다.

class DrawingProxy 
    def drawAtPoint(point, withFont:font) 
    @str.drawAtPoint(point, withFont:font) 
    end 
end 

그 링크는 선택기와 효과적으로 "과부하"동일한 이름으로 루비 방법을 가질 수 있다는 점에서 약간 비 루비 방향으로 일을한다 RubyMotion에서지도 방법 목표 - C 메시지를 설명 그들은 고유 한 선택자 (인수)를 가지고 있기 때문에 오래.

귀하의 예를 표현하는 더 RubyMotion 방법은 다음과 같습니다

def foo(message, withOffset = 20) 
    # Do something 
end 

당신은 오히려 "="이 아닌 ":"(통화 값)를 사용하고 구문 (디폴트 선언).

+3

그래서 답은 실제로 "아니오"입니다. 왜냐하면 저자의 예제는 유효한 루비 2.0 이었지만 RubyMotion에서는 작동하지 않기 때문입니다. RubyMotion은 Obj-C와 상호 작용하는 데 도움이되는 것과 비슷한 것을 가지고 있습니다. – devth

1

RubyMotion 루비 2.0.0 전에 해제 되었으나 콜백/대리인 방법을 정의하기 위해 예를 들어, 목표-C와 상호 키워드 인자를 필요로했다. RubyMotion에 따라서

def tableView(view, numberOfRowsInSection: section) 
    # ... 
end 

인수 키워드 이름 (numberOfRowsInSection)를 인수 이름 (section)에서 분리하고, 키워드에있는 경우 : 그래서 당시 기존의 키워드 인수 제안 중 하나를 기반으로 키워드 인수를 도입 서명이 필요하다.

그러나, 루비 2.0.0 다른 디자인에 충실하기로 결정

def foo(message, offset: 0) 
    # ... 
end 

인수 키워드 이름이 인수 이름 (offset), 그들은 항상 (여기 0) 기본값이와 동일 그들은 선택 사항입니다 (여기 offset없이 foo(message)라고 부를 수 있습니다).

이것은 약간 불행합니다. 그러나 RubyMotion이 미래에 Ruby 2.0.0 키워드 인수를 지원하기 위해 어떻게 진화 할 것인가에 관심이 있습니다.