【问题标题】:Ruby default values errorRuby 默认值错误
【发布时间】:2013-12-24 21:10:29
【问题描述】:

我正在阅读 gem "activerecord-postgres-earthdistance" 的源代码。

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

def order_by_distance lat, lng, order: "ASC"

order: "ASC" 出现错误

syntax error, unexpected tLABEL

这不是有效的 Ruby 语法吗?

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    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

    【讨论】:

      【解决方案2】:
      def order_by_distance(lat, lng, hash={})
        puts hash[:order]
      end
      
      => order_by_distance(lat, lng, order: "ASC")
      => "ASC"
      

      use hash arguments in ruby

      【讨论】:

      • 我也试过了 def foo(a, b: "ASC") puts "runs" end 它给出了错误syntax error, unexpected ')', expecting $end
      • 你使用什么ruby 版本?
      • ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
      • def foo( a, b: "ASC") puts "runs" end inline?
      • 内联使用需要def foo( a, b: "ASC"); puts "runs"; end
      猜你喜欢
      • 2015-05-02
      • 1970-01-01
      • 1970-01-01
      • 2015-02-17
      • 2017-07-31
      • 1970-01-01
      • 1970-01-01
      • 2018-03-21
      • 2018-11-22
      相关资源
      最近更新 更多