ruby类和对象-不同的比较方法
因此,请参见以下代码:ruby类和对象-不同的比较方法,ruby,Ruby,因此,请参见以下代码: s1 = "a" => "a" s1.class => String s1.class == String => true s1.class === String => false String == String => true String === String => false String === s1 => true String == s1 => false
s1 = "a"
=> "a"
s1.class
=> String
s1.class == String
=> true
s1.class === String
=> false
String == String
=> true
String === String
=> false
String === s1
=> true
String == s1
=> false
s1 == String
=> false
s1 === String
=> false
我的问题是->
String==String
的计算结果为true,但String==String
不是吗李>
是不是因为事实上这些是不同的对象
存储在内存的不同部分?如果是,我们为什么要这样做
初始化字符串的多个类对象?(这些不应该是
单身汉?)
字符串继承自对象,并包含可比较的模块。
从对象字符串获取===
()
从Comparable中可以得到==
()
通过阅读定义,我发现==
通常与==
相同,但字符串不是这样。我不知道为什么
s1===String
为false,而String===s1
为true我假设这是因为字符串的“a”对象上的
===
实现与字符串类上的===
实现不同,但是===
如何在字符串上工作(可能它为什么以这种方式工作)(它如何知道应该比较对象的类而不是内存中的值/位置)?你说得对=
和=
是字符串类和字符串实例上的不同方法。请看一看不同的文档
String==String
的计算结果为true
,而String==String
的计算结果不为
正如您在文档模块中所看到的那样,==
基本上意味着如果双方都是相同的对象。String
类是否与String
类相同?对但是Module.==
如果右侧是左侧类的实例,则返回true
。IdString
字符串的实例?没有
为什么s1===String
是false
但是String==s1
是true
?
s1===String
在String实例上调用==
。当两侧是同一对象时,此方法返回true
。String
的实例和类Sting
是同一个对象吗?没有。但是String===s1
已经–正如前面已经解释的那样的含义是?
:是String的实例吗?是的。同样的事情发生在case
中,当字符串
不匹配时,我假设case
使用==
。这两个操作符之间的区别已经解释清楚了。我同意,如果右侧是该类的实例,则@Kris==
返回true,在重复中解释了这个问题。不知怎么的,我在文件里漏掉了。谢谢值得指出的是,==
也被称为案例平等,如文档中所述。当您将此运算符作为when
参数提供时,将调用此运算符<代码>案例“你好,世界!”;when/ello/then true;结束#=>true
或案例15;当1..20为真时;end#=>true
也使用此运算符<代码>[5,25,83,nil,'hey'].grep(5..30)#=>[5,25]
或[5,25,83,nil,'hey'].grep(字符串)#=>['hey']