Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ruby类和对象-不同的比较方法_Ruby - Fatal编程技术网

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
    。Id
    String
    字符串的实例?没有

    为什么
    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']