【问题标题】:Symbol to method call [duplicate]方法调用的符号[重复]
【发布时间】:2013-12-06 02:35:38
【问题描述】:

有没有办法将符号转换为方法调用?我知道字符串可以,但符号不行。我在conveyance.rb 中有这段代码:

def boats
  boats = []
  User.all.each{ |u| boats += u.boats}
  boats
end
def boats_nb
  self.boats.length
end
def cars
  cars = []
  User.all.each{ |u| cars += u.cars}
  cars
end
def cars_nb
  self.cars.length
end

我想知道是否有办法制作这样的方法:

def conveyances(:symb)
  c = []
  User.all.each{ |u| c += u.to_method(:symb) }
  c
end
def conveyances_nb(:symb)
  User.to_method(:symb).length
end

【问题讨论】:

    标签: ruby


    【解决方案1】:

    您可以使用Object#public_send 方法:

    def conveyqnces_nb(symb)
      User.public_send(symb).length
    end
    

    或者,如果您愿意,Object#send 可能是合适的。不同之处在于send 允许调用私有和受保护的方法,而public_send 充当典型的方法调用——如果方法是私有的或受保护的并且不允许调用者对象调用它,则会引发错误。

    【讨论】:

      【解决方案2】:

      使用#send 实例方法

      u.send(:symb)
      

      【讨论】:

        猜你喜欢
        • 2013-01-22
        • 2015-06-20
        • 2019-05-31
        • 1970-01-01
        • 2011-11-06
        • 2019-03-23
        • 1970-01-01
        • 2012-06-18
        • 1970-01-01
        相关资源
        最近更新 更多