【发布时间】: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