gpt4 book ai didi

没有继承的 Ruby 类重写

转载 作者:数据小太阳 更新时间:2023-10-29 07:32:10 24 4
gpt4 key购买 nike

我刚刚做了这个实验:

class A < Hash
def foo
'foo'
end
end

class A < Hash
def bar
'bar'
end
end

到目前为止,我得到了预期的结果,第二个声明扩展了第一个声明。然而,我对此感到惊讶:

class A
def call
puts foo
puts bar
end
end

上面的代码有效,但前提是我稍后声明它。否则我会得到:

TypeError: superclass mismatch for class A

我可以假设在 Ruby 中,在确保“原始优先”声明被解析后跳过父类(super class)规范是安全的而没有副作用吗?

最佳答案

您只能在类定义的第一次出现时声明继承,因此以下变体将起作用:

  1. 当您定义了相同的类继承时:

    class A < Hash
    end

    class A < Hash
    end
  2. 当您在第二种情况下使用默认继承时,将被视为未定义继承:

    class A < Hash
    end

    class A
    end
  3. 当您在这两种情况下都使用默认继承时,默认继承是 Object 类:

    class A
    end

    class A
    end

下面不会:

  1. 当您在第一种情况下使用默认继承,然后您尝试显式重新定义它时:

    class A
    end

    class A < Hash
    end

    TypeError: superclass mismatch for class A
  2. 当您在第一种情况下使用指定的继承(例如 String),然后您尝试显式地重新定义它(例如 Hash) ):

    class A < String
    end

    class A < Hash
    end

    TypeError: superclass mismatch for class A

关于没有继承的 Ruby 类重写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21483282/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com