内部工作的Integer('string')调用?

时间:2014-01-20 13:10:37

标签: ruby class inheritance

如果我想查看字符串是否是有效整数,我可以这样做:

puts Integer('1') #=> 1

因为任何非整数都会引发错误:

puts Integer('a') #=> invalid value for Integer(): "a" (ArgumentError)

如果我想确保我的变量是Float和Integer,我不想重复自己,所以我尝试将这些类放在一个列表中:

x = '1'
[Integer, Float].each{|c| puts c(x) } #=> undefined method `c' for main:Object (NoMethodError)

有人会解释为什么这不起作用,如果有某种方法可以实现我想要的东西?什么样的方法调用是Integer(var)

注意,我没有现实世界的问题我想在这里解决,我只是好奇。

1 个答案:

答案 0 :(得分:5)

当你这样做时:

Integer('10')

你本质上是调用Integer中定义的Kernel类方法,并将参数传递给10

为了达到你想要的目的,你可以做到:

[:Integer, :Float].each { |c| puts method(c).call(x) }