方法调用的符号

时间:2013-11-21 14:50:11

标签: ruby

有没有办法将符号转换为方法调用?我知道它可能是一个字符串,但不是符号。我在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

2 个答案:

答案 0 :(得分:7)

您可以使用Object#public_send方法:

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

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

答案 1 :(得分:3)

使用#send实例方法

u.send(:symb)