我有这条线:
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) }
如果您更喜欢语法,也可以使用 lambda 版本:
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