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

问题描述 投票:1回答:2

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

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

foo(arg?: true)
ruby
2个回答
2
投票

更新

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

原版的:

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

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

foo(:"arg?" => true)

引号可能没有必要,我必须打开控制台进行检查。在这种情况下:

foo(arg?: true)

更新2

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


2
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.