Ruby 2.1.1 ArgumentError при передаче хэша перед аргументами ключевого слова

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

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


person KomodoDave    schedule 09.07.2014    source источник


Ответы (1)


Пытаться

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)

person bhaity    schedule 13.04.2015