Ruby解释变量is_a?

Ruby解释变量is_a?

问题描述:

我期待根据另一个变量中保存的值来检查变量的类型,但我正在努力。我对ruby完全陌生,但任何人都可以告诉我如何在表达式中解释一个变量的值?我当前的代码看起来像: -Ruby解释变量is_a?

if variable.is_a?("#{variable_type}") 
    puts variable 
end 

variable可以包含任何东西,variable_type包含像字符串或一个长整数变量的类型。但目前这段代码给我TypeError: Class or module required.有什么想法?

+0

。 –

您的代码发送一个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?看到。

您可以通过两种方式调整你的代码:

  1. 传递类,没有串。

  2. 使用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 
+0

谢谢。这样可行。 –

+0

我的荣幸,祝你好运! – Myst

+0

通常,只要使用'var'或'var.to_s',不建议使用'“#{var}”''。 –

只是一个小例子:

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 
+0

谢谢,你已经帮助我更多地了解我的问题,这是有道理的,但如果variable_type =“String”而不是String? –

+0

@JjNo它将返回相同的错误,因为它将是一个字符串,而不是类名 –

+1

要从字符串中获取类,请使用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 
+0

谢谢。所以我想我的下一个问题是假设我在'variable_type'中有一个字符串,我该如何将它转换为类名? –

+0

非常感谢@AndreyDeineko –