gpt4 book ai didi

ruby - 类 << 模块中的符号

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

我正在尝试将一个模块混合到一个类中,我希望其中一些方法表现为类方法,而其他方法表现为实例方法。

但是,我不想同时include extend模块。我宁愿只是 include

当我用这种表示法包装我想成为类方法的方法时,它起作用了:

class <<
# ...
end

但是,当我使用这种表示法时,它不起作用:

class << self
# ...
end

我怀疑 self关键字正在建立对模块的显式绑定(bind),而不是它混入的类。但我没有看到任何建议离开 self 的文档使用 class << 时关闭关键字符号。

有人知道这是怎么回事吗?


更新:为了更加清晰,这里有一些示例代码:

module M
class <<
def class_method
puts "From inside the class_method"
end
end

def instance_method
puts "From inside the instance_method"
end
end

class Object
include M
end

class C
end


C.class_method

obj = C.new
obj.instance_method

最佳答案

class <<必须始终跟一个对象。就class <<; end是语法错误。在您的情况下,它看起来有效,原因如下:

class <<
def class_method
puts "From inside the class_method"
end
end

相同
class << def class_method
puts "From inside the class_method"
end
end

相同
temp = def class_method
puts "From inside the class_method"
end
class << temp
end

相同
def class_method
puts "From inside the class_method"
end
class << nil
end

相同
def class_method
puts "From inside the class_method"
end

当然,这实际上并没有定义类方法。它定义了一个实例方法。

关于ruby - 类 << 模块中的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10775523/

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