0

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

但是,调用此对象会导致privateTokeninitialize

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

有人可以解释为什么会这样吗?我没有在关键字参数文档中看到任何关于关键字散列扩展的提及。从我读到的参数顺序应该是:标准参数、默认参数、关键字参数。

4

1 回答 1

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)

于 2015-04-13T19:11:01.957 回答