2014-01-20 3 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') 

вы, по сути, вызывая метод Integer класс, определенный в Kernel, передавая ему аргумент 10.

Чтобы достичь того, чего вы хотите, вы можете сделать:

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

Другой способ: '[: Integer,: Float] .each {| с | puts send (c, x)} ' – dusan