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