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