如何检查变量是数字还是字符串?

Lee*_*fin 61 ruby

如何在Ruby中检查变量是数字还是字符串?

Mic*_*ohl 82

有几种方法:

>> 1.class #=> Fixnum
>> "foo".class #=> String
>> 1.is_a? Numeric #=> true
>> "foo".is_a? String #=> true
Run Code Online (Sandbox Code Playgroud)

  • 鉴于SO(以及其他地方)的问题是如何通俗地提出的,可以假设OP的含义是公平的,特别是因为他或她接受了它. (29认同)
  • 这不检查*变量*是否为数字,它检查变量*指向*的对象是否为数字.两者之间存在巨大的差异. (9认同)

ins*_*ero 29

class Object
  def is_number?
    to_f.to_s == to_s || to_i.to_s == to_s
  end
end

> 15.is_number?
=> true
> 15.0.is_number?
=> true
> '15'.is_number?
=> true
> '15.0'.is_number?
=> true
> 'String'.is_number?
=> false
Run Code Online (Sandbox Code Playgroud)

  • 在少数情况下会失败,例如`15.10`,`015`或`15.33333333333333333`. (2认同)

Chr*_*ind 12

var.is_a? String

var.is_a? Numeric
Run Code Online (Sandbox Code Playgroud)

  • @Jörg:我认为OP很明显是什么,在这种情况下不需要迂腐. (20认同)
  • 这不检查*变量*是否为数字,它检查变量*指向*的对象是否为数字.两者之间存在巨大的差异. (4认同)

Fra*_*ehl 5

finishing_moves宝石包括String#numeric?完成这项任务非常方法.该方法与installero的答案相同,只是打包了.

"1.2".numeric?
#=> true

"1.2e34".numeric?
#=> true

"1.2.3".numeric?
#=> false

"a".numeric?
#=> false
Run Code Online (Sandbox Code Playgroud)