У меня есть функция, как это:не в состоянии сделать класс (аргумент) с Eval рубина
def check_if_correct_type(type, value)
# nil.test!
# eval(type.classify(value)) rescue return false
# true
case type
when "integer"
!!Integer(value) rescue return false
when "float"
!!Float(value) rescue return false
else
return true
end
true
end
Образец будет
check_if_correct_type("integer", "a")
Я попытался изменить функцию так:
check_if_correct_type(type, value)
!!(eval(type.classify(value))) rescue return false
true
end
Это ошибка. Как это исправить. Я довольно новичок в мета-программировании, так что потерялся.
Update 1:
"adfadf".kind_of?(String) #=> true
123.kind_of?(String) #=> false
# The "Fixnum" class is actually used for integers
"adfadf".kind_of?(Fixnum) #=> false
123123.kind_of?(Fixnum) #=> true
12.3.kind_of?(Float) #=> true
"sadf".kind_of?(Float) #=> false
12.kind_of?(Float) #=> false
выше не будет работать для меня, как kind_of? функция будет найти тип объекта, где, как для меня ответ требует, чтобы быть похожим на это:
check_if_correct_type("integer", "1221") #=> true
check_if_correct_type("float", "1.24") #=> true
check_if_correct_type("string", "asds12") #=> true
check_if_correct_type("float", "asdasd1.24") #=> false
где, как
"1,24" .kind_of (Float) # => ложный
? Вот почему преобразование работает для меня. Надеюсь, теперь вопрос более ясен.
Update 2:
Это то, что я получаю, если я использую общественный посыл.
!! public_send ("целое число" .capitalize ("1")) ArgumentError: неправильное количество аргументов (1 для 0) из (Поддеть): 4: в capitalize' [5] pry(main)> !!public_send("integer".classify("1")) ArgumentError: wrong number of arguments (1 for 0) from /home/aravind/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/activesupport-4.2.0/lib/active_support/core_ext/string/inflections.rb:187:in
КЛАССИФИЦИРУЙТЕ»
Примечание: классифицировать является частью Ruby on Rails, а не Ruby.
Обратите внимание, что 'Kernel # Integer' и 'Kernel # Float' являются * конверсионными * методами и ограниченным использованием для проверки типов. 'Integer (2.5)' возвращает '2', хотя' 2.5' не является целым числом, а 'Integer (Time.new)' возвращает количество секунд. – Stefan
Откуда берется 'value' и что означает' check_if_correct_type'? Как он используется? – Stefan
@Stefan Проверьте вопрос сейчас, я обновил. – Aravind