В 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']
Может кто-нибудь объяснить, почему это происходит? Я не видел никаких упоминаний о расширении хеша для ключевых слов в Документация по аргументам ключевых слов. И из того, что я прочитал, порядок аргументов должен быть следующим: стандартные аргументы, аргументы по умолчанию, аргументы ключевого слова.