Ruby解释变量is_a?
我期待根据另一个变量中保存的值来检查变量的类型,但我正在努力。我对ruby完全陌生,但任何人都可以告诉我如何在表达式中解释一个变量的值?我当前的代码看起来像: -Ruby解释变量is_a?
if variable.is_a?("#{variable_type}")
puts variable
end
凡variable
可以包含任何东西,variable_type
包含像字符串或一个长整数变量的类型。但目前这段代码给我TypeError: Class or module required.
有什么想法?
您的代码发送一个String对象的#is_a?
方法和#is_a
方法需要一个类。
例如,String
与"String"
:
variable = "Hello!"
variable_type = String
"#{variable_type}" # => "String"
# your code:
if variable.is_a?("#{variable_type}")
puts variable
end
#is_a?
预计实际的类(字符串,Fixnum对象,等') - 你可以在the documentation for #is_a?
看到。
您可以通过两种方式调整你的代码:
传递类,没有串。
使用
Module.const_get
将字符串转换为类。
这里有一个例子:如果您使用Rails,而不是'Object.const_get(variable_type)`你可以只用`variable_type.constantize`从字符串获得一类
variable = "Hello!"
variable_type = String
"#{variable_type}" # => "String"
# passing the actual class:
if variable.is_a?(variable_type)
puts variable
end
# or,
# converting the string to a the type:
if variable.is_a?(Module.const_get(variable_type.to_s))
puts variable
end
只是一个小例子:
variable = 1
variable_type = String
puts variable if variable.is_a?(variable_type)
#=> nil
variable_type = Integer
puts variable if variable.is_a?(variable_type)
#=> 1
,或者您的variable_type
是一个字符串:
variable_type = 'Integer'
puts variable if variable.is_a?(Object.const_get(variable_type))
#=> 1
谢谢,你已经帮助我更多地了解我的问题,这是有道理的,但如果variable_type =“String”而不是String? –
@JjNo它将返回相同的错误,因为它将是一个字符串,而不是类名 –
要从字符串中获取类,请使用Object.const_get(“String”)'。 –
TypeError: Class or module required
这意味着,使用is_a?
varibale_type
应持类名(任何)。
因此,如果您持有除variable_type
中的类名称以外的其他任何内容,它会给你这个错误。
a = :a
variable_type = Symbol
a if a.is_a? variable_type
# => :a
如果变量类型为字符串,你将不得不使用Module#const_get
:
variable_type = 'Symbol'
a if a.is_a? Object.const_get(variable_type)
# => :a
谢谢。所以我想我的下一个问题是假设我在'variable_type'中有一个字符串,我该如何将它转换为类名? –
非常感谢@AndreyDeineko –
。 –