使用Ruby中的动态变量从方法中删除eval

时间:2017-03-09 08:56:06

标签: ruby-on-rails ruby eval rubocop

传递以下方法Dim ie As ImportExportSpecification For Each ie In CurrentProject.ImportExportSpecifications Debug.Print ie.Name Next ,它与方法名称和通过:symbol设置的实例变量相关联。我能够完成这项工作的唯一方法是通过eval。有办法解决这个问题吗?

attr_accessor :symbol

2 个答案:

答案 0 :(得分:3)

您可以使用public_send

  def collection_exists?(event_list)
    send(event_list).any?
  end

答案 1 :(得分:1)

您可以使用以下选项之一:

  1. Object#method

    method(event_list.to_sym).call.any?
    
  2. Object#public_send

    public_send(event_list.to_sym).any?
    
  3. 请注意,使用public_send比使用send更安全,因为后者不关心方法的可见性,可以使用protected和{{1}方法很顺利,而private(因为你从它的名字中猜出来)如果你试图用它来调用非public_send方法,就会提高。

    另请注意,您不需要public来读取值,这是隐含的。