Rubymotion是否支持ruby 2.0关键字参数?我有这个方法,它会抛出这个错误:syntax error, unexpected tSTRING_BEG, expecting tIDENTIFIER
def foo(message, offset: 20)
# Do something
end
我使用的是以下版本的Ruby,但它似乎无法正常工作?
$ ruby -v
vruby 2.0.0p353 (2013-11-22 revision 43784) [x86_64-darwin13.0.2]
答案 0 :(得分:1)
没有
RubyMotion是在Ruby 2.0.0之前发布的,但它需要关键字参数来与Objective-C进行互操作,例如定义回调/委托方法。因此,它在当时基于现有关键字参数提议之一引入了关键字参数:
def tableView(view, numberOfRowsInSection: section)
# ...
end
因此在RubyMotion中,参数关键字名称(numberOfRowsInSection
)与参数名称(section
)是分开的,如果签名中存在关键字,则需要它。
然而,Ruby 2.0.0决定坚持使用不同的设计:
def foo(message, offset: 0)
# ...
end
参数关键字名称与参数名称(offset
)相同,它们始终具有默认值(此处为0
),并且它们是可选的(您可以调用foo(message)
offset
这里。)
这有点不幸。但我很想知道RubyMotion将来如何发展以支持Ruby 2.0.0关键字参数。
答案 1 :(得分:0)
是
使用the Ruby Motion developer center docs作为参考,这里的示例与您尝试做的很相似。
class DrawingProxy
def drawAtPoint(point, withFont:font)
@str.drawAtPoint(point, withFont:font)
end
end
该链接解释了带有选择器的Objective-C消息如何映射到RubyMotion和从RubyMotion映射,这使得事物处于略微非Ruby的方向,因为您可以有效地使用具有相同名称的Ruby方法&#34 ;重载"只要他们有唯一的选择器(参数)。
表达您的示例的更多RubyMotion方式是:
def foo(message, withOffset = 20)
# Do something
end
你正在使用" :
" (通话价值)而不是" =
" (声明默认)语法。