如何在方法中使用带问号的参数有关键字参数

时间:2018-02-28 07:08:24

标签: ruby

如何在方法中使用带问号的参数有关键字参数?

def foo(arg?:)
  p arg? # ERROR
end

foo(arg?: true)

2 个答案:

答案 0 :(得分:3)

你做不到。参数名称不能包含问号或感叹号。只有方法名称才能拥有它们。

正如约翰所提到的,你应该能够使用好的旧选项哈希。虽然在这种情况下foo(arg?: true)arg?: true是哈希中的键值对,而不是关键字参数。差别很大(例如,使用选项哈希,您不需要轻松的必需参数和拼写错误保护。)

答案 1 :(得分:3)

更新

刚刚确认,您可以foo(arg?: true)

<强>原始

我不确定你能不能拥有“?”在一个小的。您可以尝试使该方法有一个输入arg,这是一个哈希,然后我认为你可以做

def foo(arg)
  p arg[:"arg?"]
end

foo(:"arg?" => true)

引号可能不是必需的,我必须打开控制台进行检查。在这种情况下:

foo(arg?: true)

更新2

塞尔吉奥在这个解决方案中正确地说出了我使用关键词论证(kwarg)这一事实,而是我传递了一个单独的常规论证我知道需要是带有:arg?密钥的哈希。这通常称为选项哈希。这是人们在ruby语言添加对kwargs的支持之前所做的事情(或者我被告知:)。