Как передать необязательный параметр метода в виде строки в Ruby - PullRequest
0 голосов
/ 16 апреля 2019

Я хотел бы вызвать метод в Ruby, который имеет необязательный параметр.

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

Я прочитал это: Методы Ruby и необязательные параметры и это: Метод с необязательным параметром , но безуспешно.

Метод выглядит следующим образом:

def method(param1, param2, options={})

    ...

    if options["something"]
        ...
    end

    ...

end

Я попробовал вызов, например, так:

method("param1", "param2", :something => true)

Смои попытки код выполняется, но не входит в условие if.Я хотел бы вызвать этот метод так, чтобы коды в операторе if выполнялись.

Ответы [ 2 ]

2 голосов
/ 16 апреля 2019

Не работает, потому что вы отправляете symbol (:something) вместо string key ('something').Это разные объекты.

Изменить:

method("param1", "param2", :something => true)

на

method("param1", "param2", 'something' => true)

или обработать в методе с помощью if options[:something]

0 голосов
/ 16 апреля 2019

Вызовите свой метод с тем же типом параметра, или, если вы хотите передать символьный или строковый ключ, вы можете обработать это в своем методе.

def foo(a,b, opt={})
  if opt[:something] || opt['something']
    puts 'something'
  end
end

Теперь вы можете вызывать это с помощью строковых или символьных клавиш:

foo('a','b', 'something' => true )
#or 
foo('a','b', something: true )
...