2

我用谷歌搜索有一个is_a?函数可以检查对象是否为整数。

但是我在rails控制台中尝试过,它不起作用。

我运行如下代码:

 "1".is_a?
 1.is_a?

我错过了什么?

4

6 回答 6

19

您忘记包含您正在测试的类:

"1".is_a?(Integer) # false
1.is_a?(Integer) # true
于 2010-11-26T03:16:43.767 回答
3

没有内置函数可以判断字符串是否有效地为整数,但您可以轻松创建自己的:

class String
  def int
    Integer(self) rescue nil
  end
end

这是有效的,因为Integer()如果字符串不能转换为整数,内核方法会抛出错误,并且内rescue nil联会将错误转换为 nil。

Integer("1") -> 1
Integer("1x") -> nil
Integer("x") -> nil

因此:

"1".int -> 1 (which in boolean terms is `true`)
"1x".int -> nil
"x".int -> nil

您可以更改函数以true在真实情况下返回,而不是整数本身,但是如果您正在测试字符串以查看它是否为整数,那么您可能想将该整数用于某些事情!我经常做这样的事情:

if i = str.int
  # do stuff with the integer i
else
  # error handling for non-integer strings
end

尽管如果测试职位的作业冒犯了您,您始终可以这样做:

i = str.int
if i
  # do stuff with the integer i
else
  # error handling for non-integer strings
end

无论哪种方式,这种方法只进行一次转换,如果你必须做很多这些,这可能是一个显着的速度优势。

[将函数名称从 更改int?int以避免暗示它应该只返回真/假。]

于 2010-11-26T04:00:20.533 回答
1

我用了一个正则表达式

if a =~ /\d+/
   puts "y"
else
   p 'w'
end
于 2010-11-26T05:41:51.577 回答
0

Ruby 有一个名为 respond_to 的函数?这可用于查看特定类或对象是否具有具有特定名称的方法。语法类似于

User.respond_to?('name') # returns true is method name exists
otherwise false

http://www.prateekdayal.net/2007/10/16/rubys-responds_to-for-checking-if-a-method-exists/

于 2010-11-26T03:11:33.557 回答
0

也许这会帮助你

str = "1"
=> "1"
num = str.to_i
=> 1
num.is_a?(Integer)
=> true

str1 = 'Hello'
=> "Hello"
num1 = str1.to_i
=> 0
num1.is_a?(Integer)
=> true
于 2010-11-26T07:31:33.433 回答
0

我想要类似的东西,但这些都没有为我做,但这个确实 - 使用“类”:

a = 11
a.class
=> Fixnum
于 2011-05-31T03:24:07.183 回答