我有以下功能
def getValue(x)
puts "Key: #{x}"
if x =~ /[0-9]+/
puts "x is an int"
else
puts "x is a string"
end
end
在getValue(1)上它应该输出" x是一个int"但相反,我得到" x是一个字符串"
答案 0 :(得分:3)
使用is_a?
检查类型:
def getValue(x)
puts "Key: #{x}"
if x.is_a?(Integer)
puts "x is an int"
else
puts "x is a string"
end
end
输出:
irb> getValue(1)
Key: 1
x is an int
irb> getValue("1")
Key: 1
x is a string
答案 1 :(得分:3)
左侧表达式必须为String
才能将=~
运算符与正则表达式一起使用。在针对正则表达式进行测试之前,在to_s
上调用x
:
def getValue(x)
puts "Key: #{x}"
if x.to_s =~ /[0-9]+/
puts "x is an int"
else
puts "x is a string"
end
end
此外,Ruby中的方法名称为snake_case
,因此getValue
应为get_value
。
如果您想检查值的类型,而不是字符串表示,则可以使用x.is_a? Integer
。
正则表达式建议:正如Michael Berkowski所说,你的正则表达式将匹配任何位置都有数字的字符串。您应该在\A
(字符串的开头)和\Z
(字符串的结尾)之间锚定模式:
\A[0-9]+\Z
更挑剔:[0-9]
字符类等同于\d
元字符,所以你也可以这样做:
\A\d+\Z
答案 2 :(得分:0)
您可能想测试它是否可以转换为整数,而不是它是否为:
def get_value(x)
puts "Key: #{x}"
# This throws an ArgumentError exception if the value cannot be converted
Integer(x)
puts "x is an int"
rescue ArgumentError
puts "x is not an integer"
end