是否可以从函数返回多个值?
我想将返回值传递给另一个函数,我想知道是否可以避免将数组分解为多个值
我的问题? 我正在为我的项目升级Capybara,我意识到,感谢CSS 'contains' selector & upgrade of Capybara,下面的陈述将不再有效
has_selector?(:css, "#rightCol:contains(\"#{page_name}\")")
我希望以最小的努力工作(有很多这样的情况),所以我想出了使用Nokogiri将css
转换为xpath
的想法。我想写它以便上面的函数可以成为
has_selector? xpath(:css, "#rightCol:contains(\"#{page_name}\")")
但是由于xpath
必须返回一个数组,我需要实际写这个
has_selector?(*xpath(:css, "#rightCol:contains(\"#{page_name}\")"))
有没有办法解决以前的行为?
为简洁起见,可以假设现在xpath
func如下所示。
def xpath(*a)
[1,2]
end
答案 0 :(得分:0)
您不能让方法返回多个值。为了做你想做的事,你必须改变has_selector?
,可能是这样的:
alias old_has_selector? :has_selector?
def has_selector? arg
case arg
when Array then old_has_selector?(*arg)
else old_has_selector?(arg)
end
end
答案 1 :(得分:0)
Ruby对从函数返回多个值的支持有限。特别是,当分配给多个变量时,返回的数组将被“解构”:
def foo
[1, 2]
end
a, b = foo
a #=> 1
b #=> 2
但是在你的情况下你需要splat(*)来表明你不仅仅是将数组作为第一个参数传递。
如果你想要一个更清晰的语法,为什么不写自己的包装器:
def has_xpath?(xp)
has_selector?(*xpath(:css, xp))
end