2014-01-20 15 views
0

如果我想看到一个字符串是否是一个有效的整数,我可以这样做:Integer('string')调用的内部工作?

puts Integer('1') #=> 1 

任何非整数会引发错误:

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

如果我想确保我的变量既是一个Float和一个整数,我不想重复自己,所以我尽量把班级列表:

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

会有人解释为什么这是不行的,如果有一些方法来实现我在找什么?什么样的方法调用是Integer(var)

注意,我没有真正的世界问题,我试图在这里解决,我只是好奇。

回答

5

当你这样做:

Integer('10') 

你基本上调用Kernel定义的Integer类方法,传递参数10

达到你想要你可以做什么:

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

另一种方式:'[:整型:浮法]。每{| C |放置发送(c,x)}' – dusan