Ruby中的类型差异比较

问题描述 投票:0回答:3

我相信这是Ruby中的一个基本问题。

有没有一种方法可以检查

a == b

即使a是一个整数,b是一个字符串?我意识到,我可以做

a.to_s == b.to_s 

但我想知道是否有其他更好的方法。

ruby syntax
3个回答
5
投票

我不确定我是否理解这个问题。如果我理解的话,我想你是想让解释器漏掉一个问题。

telemachus ~ $ irb
irb(main):001:0> a = 1
=> 1
irb(main):002:0> b = '1'
=> "1"
irb(main):003:0> a == b
=> false

你可以比较... 1'1' 随你怎么说,但他们 不是 根据Ruby对字符串和数字的处理方式,Ruby是平等的。一言以蔽之,Ruby不是Perl。(编辑: 我应该澄清一下,数字1和字符串 "1 "显然不是一回事。显然,数字1和字符串 "1 "不是一回事。所以这不是Ruby如何处理它们的问题。如果你直接比较它们,它们就是不一样的。我的意思是Ruby不会像Perl那样进行自动转换。这取决于你来自哪种语言,以及你对打字的态度,这会让你感到高兴,或者感到惊讶,或者感到恼火,或者是这些的组合)。)


4
投票

那么像这样的东西呢。

class Object
    def compare_as_strings(other)
      return self.to_s == other.to_s
    end
end

我不喜欢扩展一些基本的东西, 但这确实是工作... ...

>> a = 1
=> 1
>> b = "1"
=> "1"
>> a.compare_as_strings(b)
=> true

0
投票

我还没有遇到过,Rails经常被这个问题绊倒,所以我怀疑没有什么巧妙的方法可以做到这一点--你必须强制使用to_s。

© www.soinside.com 2019 - 2024. All rights reserved.