gpt4 book ai didi

ruby 方法充当实例方法和类方法

转载 作者:太空宇宙 更新时间:2023-11-03 17:20:39 26 4
gpt4 key购买 nike

在 irb 控制台中,我创建了一个类“Hello”

irb(main):001:0> class Hello
irb(main):002:1> end
=> nil

并在名为“hi”的“Hello”类之外创建了一个方法

irb(main):003:0> def hi
irb(main):004:1> 'hiiii'
irb(main):005:1> end
=> :hi

现在这个hi方法既是类方法又是实例方法

irb(main):006:0> Hello.hi
=> "hiiii"
irb(main):007:0> Hello.new.hi
=> "hiiii"
irb(main):008:0> hi
=> "hiiii"

为什么这个 hi 方法是使用类“Hello”调用的,即使它在“Hello”类上下文之外?

最佳答案

在“主”上下文中定义的方法(即不在类或模块声明中)是在 Object 上定义的。由于每个类,包括(big-C)类,都继承自Object,因此该方法存在于每个对象和每个类的继承链中。您可以通过在 Object 上显式定义方法来观察相同的行为:

class Object
def foo
puts "Hello"
end
end

class Bar; end

Bar.foo
# => Hello

Bar.new.foo
# => Hello

foo
# => Hello

关于ruby 方法充当实例方法和类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44833220/

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