0

我有这条线:

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

4

2 回答 2

3

“移动块”最简单的方法就是让它成为一种方法。

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) }
于 2013-10-01T13:06:16.843 回答
0

如果您更喜欢语法,也可以使用 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
于 2013-10-01T14:13:31.170 回答