我有这样一行:块清除地图红宝石
my_array.map do |x|
if x.to_i == 0
x.starts_with?("new") ? x[3..-1] : ''
else
Tag.find(x).name
end
end
我想打扫一下,和块移动到一个功能,我可以重复使用。
我该怎么做?我应该在函数中写一个块吗?或者一个常规功能,但是我怎样才能使用map
?
我有这样一行:块清除地图红宝石
my_array.map do |x|
if x.to_i == 0
x.starts_with?("new") ? x[3..-1] : ''
else
Tag.find(x).name
end
end
我想打扫一下,和块移动到一个功能,我可以重复使用。
我该怎么做?我应该在函数中写一个块吗?或者一个常规功能,但是我怎样才能使用map
?
“移动块”的最简单方法就是使其成为一种方法。
def foo x
if x.to_i == 0
x.starts_with?("new") ? x[3..-1] : ''
else
Tag.find(x).name
end
end
my_array.map { |x| foo(x) }
拉姆达版本也是可能的,如果你喜欢的语法更好:
name_of_item = ->(item) do # use "lambda do |item|" in older versions of ruby.
if item.to_i == 0
item.starts_with?("new") ? x[3..-1] : ''
else
Tag.find(item).name
end
end
my_array.map &name_of_item
匿名函数在JavaScript中不像Ruby中那么常见。你能给出一个可能出现的实例吗? – Nikola
它的时候会比较好写块和屈服呢? –
你错过了一个'结束'。 – toro2k
@NickGinanto当你不希望重用块的任何部分。 – Max