Rubymotion支持ruby 2.0关键字参数

时间:2013-12-18 02:38:18

标签: rubymotion

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]

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

你正在使用" :" (通话价值)而不是" =" (声明默认)语法。