-2

使用 Rails 3.2。我有以下内容:

FRUITS = %w(
  apple
  orange
)

FRUITS.each do |fruit|
  define_method "#{fruit}" do
    stalls.collect(&:fruit).join(' ')
  end
end

预期结果是:

def apple
  stalls.collect(&:apple).join(' ')
end

def orange
  stalls.collect(&:orange).join(' ')
end

我在退回fruitin 时遇到问题.collect(&:fruit)。我应该改变什么?谢谢。

4

2 回答 2

3

使用完整的块形式(不是#to_proc快捷方式)

FRUITS.each do |fruit|
  define_method "#{fruit}" do
    stalls.collect{|st| st.send(fruit.to_sym)}.join(' ')
  end
end
于 2013-09-01T18:31:19.777 回答
1

您在调用中使用符号:fruit来收集,因此生成的方法将如下所示:

def orange
  stalls.collect(&:fruit).join(' ')
end

您需要从fruit字符串(使用String#to_sym)创建符号,如下所示:

FRUITS.each do |fruit|
  define_method "#{fruit}" do
    stalls.collect(&fruit.to_sym).join(' ')
  end
end
于 2013-09-01T20:29:42.293 回答