【问题标题】:Ruby 2.1.1 ArgumentError when passing hash before keyword arguments在关键字参数之前传递哈希时的Ruby 2.1.1 ArgumentError
【发布时间】:2014-08-30 06:37:32
【问题描述】:

在 Ruby 2.1.1 中,我定义了以下方法:

def post(url, params={}, send_json: false, success_only: true)

这在同一个对象中在另一个方法privateToken 中被调用,如下所示:

    self.post("#{@url}/api/v3/session", {
        :login    => @user,
        :password => @pass,
    })['private_token']

但是,为此对象在 initialize 中调用 privateToken 会导致:

<script>:207:in `privateToken': unknown keywords: login, password (ArgumentError)
    from <script>:199:in `initialize'
    from <script>:575:in `new'
    from <script>:575:in `<main>'

如果我将post 方法更改为接受params 作为关键字参数,则可以避免此错误:

def post(url, params: {}, send_json: false, success_only: true)

# ..then in method 'privateToken':
self.post("#{@url}/api/v3/session", params: {
   :login    => @user,
   :password => @pass,
})['private_token']

有人能解释一下为什么会这样吗?我在Keyword arguments documentation 中没有看到任何提及对关键字进行哈希扩展的内容。从我读到的参数顺序应该是:标准参数、默认参数、关键字参数。

【问题讨论】:

    标签: keyword-argument ruby-2.1 argument-error


    【解决方案1】:

    试试

    def post(url, send_json: false, success_only: true, **params)

    看到这个答案https://stackoverflow.com/a/20633975/1285164

    现在你可以打电话了

    self.post("#{@url}/api/v3/session", login: @user, password: @pass)

    【讨论】:

      猜你喜欢
      • 2014-05-30
      • 2018-03-01
      • 1970-01-01
      • 2015-04-13
      • 2014-03-28
      • 1970-01-01
      • 1970-01-01
      • 2011-07-01
      • 2019-12-25
      相关资源
      最近更新 更多