有没有办法在ruby中随机调用特定类的方法?

时间:2017-06-30 14:11:11

标签: ruby class random methods

我想知道是否可以做这样的事情:

class Something
  def A
    puts "A"
  end
  def B
    puts "B"
  end
  def C
    puts "C"
  end
  def D
    puts "D"
  end
end

y = Something.new
x = Random.new
x.rand(y)
然后得到" Something"的随机结果。类

3 个答案:

答案 0 :(得分:4)

单行答案是:

Something.new.send(Something.instance_methods(false).shuffle.first)

<强>释

Something.instance_methods(false)
# Will give you [:A, :B, :C, :D]

Something.instance_methods(false).shuffle.first
# Will give you a random method out of it

Something.new.send(<method name>)
# Will call that random method and give you output

FROM COMMENTS (一个很好的建议)

您可以像以下一样使用它:

Something.instance_methods(false).sample代替Something.instance_methods(false).shuffle.first

答案 1 :(得分:0)

如果你真的想这样做 -

x.send(x.instance_methods(false).sample, y)

当然,如果目标方法不接受论证,这将无法奏效。

答案 2 :(得分:0)

"