我可以使用 '&' shorthand 来选择匹配项吗?
Can I use '&' shorthand for selecting matches?
我有这个代码:
result=
["MA-1", "NY-2", "CT-2", "NJ-1", "NJ-2", "NJ-3"].select do |element|
element.match '2'
end
有没有办法在不使用单独的 proc 的情况下使用 &
快捷方式?
我试过了:
["MA-1", "NY-2", "CT-2", "NJ-1", "NJ-2", "NJ-3"].select(&:match('2'))
这会引发语法错误。
[can I do this] without using a separate proc
没有。主要是因为 &
和符号都不是方法或任何可以接受参数的东西。您必须使用完整的表格。
看来你可以使用 grep
:
["MA-1", "NY-2", "CT-2", "NJ-1", "NJ-2", "NJ-3"].grep(/2/)
#=> ["NY-2", "CT-2", "NJ-2"]
或使用自定义过程:
my_proc = ->(e) { e.match('2') }
["MA-1", "NY-2", "CT-2", "NJ-1", "NJ-2", "NJ-3"].select(&my_proc)
#=> ["NY-2", "CT-2", "NJ-2"]
或(感谢@engineersmnky):
select(&/2/.method(:match))
我有这个代码:
result=
["MA-1", "NY-2", "CT-2", "NJ-1", "NJ-2", "NJ-3"].select do |element|
element.match '2'
end
有没有办法在不使用单独的 proc 的情况下使用 &
快捷方式?
我试过了:
["MA-1", "NY-2", "CT-2", "NJ-1", "NJ-2", "NJ-3"].select(&:match('2'))
这会引发语法错误。
[can I do this] without using a separate proc
没有。主要是因为 &
和符号都不是方法或任何可以接受参数的东西。您必须使用完整的表格。
看来你可以使用 grep
:
["MA-1", "NY-2", "CT-2", "NJ-1", "NJ-2", "NJ-3"].grep(/2/)
#=> ["NY-2", "CT-2", "NJ-2"]
或使用自定义过程:
my_proc = ->(e) { e.match('2') }
["MA-1", "NY-2", "CT-2", "NJ-1", "NJ-2", "NJ-3"].select(&my_proc)
#=> ["NY-2", "CT-2", "NJ-2"]
或(感谢@engineersmnky):
select(&/2/.method(:match))