在关键字参数之前传递哈希时,Ruby 2.1.1 ArgumentError

时间:2014-07-09 09:40:57

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

在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']

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

<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中关键字的哈希扩展。从我读过的参数排序应该是:标准参数,默认参数,关键字参数。

1 个答案:

答案 0 :(得分:0)

尝试

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)