根据调用方法调用方法

时间:2015-01-28 16:21:23

标签: ruby ruby-on-rails-4

假设我有一个班级:

class MyClass
  # In my class I have these 2 filters
  self.properties_for_create = [:p1, :p2, :p3]
  self.properties_for_update = [:p2, :p3, :p4]

  # Then I have these 2 methods
  def create(list_of_properties)
    raise TypeError, "Must be Array!" unless list_of_properties.is_a?(Array)

    # do something ...
  end

  def update(list_of_properties)
    raise TypeError, "Must be Array!" unless list_of_properties.is_a?(Array)

    # do something ...
  end
end

然后我想要一个方法my_filter_method,以便:

def create(list_of_properties)
  ...

  filter = my_filter_method # will return properties_for_create

  ...
end

def update(list_of_properties)
  ...

  filter = my_filter_method # will return properties_for_update

  ...
end

通过采用任何命名方案和参数,我应该如何实现这个my_filter_method,使其看起来干燥可读?

1 个答案:

答案 0 :(得分:0)

没有简单的方法可以做到,但你可以这样做:

caller.first.scan(/`(\w+)'/).first.first

这将返回调用方法的名称,因此您可以将其放在my_filter_method中,它会为您提供'create''update'

我应该指出,我不建议这样做。对于像这样的简单情况,最好避免使用这种复杂的元编程。