Ruby默认值错误

时间:2013-12-07 13:55:19

标签: ruby-on-rails ruby

我正在阅读宝石“activerecord-postgres-earthdistance”的源代码。

在运行迁移脚本时,它在以下方法上引发了错误

def order_by_distance lat, lng, order: "ASC"

order: "ASC"

错误
syntax error, unexpected tLABEL

这不是有效的Ruby语法吗?

2 个答案:

答案 0 :(得分:2)

Ruby 2.0支持关键字参数

[5] pry(main)> def bar(a: "name", b: "fem"); puts a,b end
[6] pry(main)> bar(a: "John", b: "Male")
John
Male
[7] pry(main)> bar("John", "Male")
ArgumentError: wrong number of arguments (2 for 0)
from (pry):5:in `bar'

但是上述内容在1.9中无效,见下文:

ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-darwin12.4.0]
[2] pry(main)> def bar(a: "name", b: "fem"); puts a,b end
SyntaxError: unexpected ',', expecting $end
def bar(a: "name", b: "fem"); puts a,b end
              ^
[2] pry(main)> def bar(a: "name"); puts a end
SyntaxError: unexpected ')', expecting $end
def bar(a: "name"); puts a end
              ^

为了更好地理解,您可以阅读herehere

答案 1 :(得分:0)

def order_by_distance(lat, lng, hash={})
  puts hash[:order]
end

=> order_by_distance(lat, lng, order: "ASC")
=> "ASC"

use hash arguments in ruby