gpt4 book ai didi

ruby - "extend self"与 "module_function"相同吗?

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

extend selfmodule_function 是实现它的两种 ruby​​ 方法,因此您可以在模块上调用方法,如果包含该模块也可以调用它。

这些方式的最终结果有什么不同吗?

最佳答案

module_function 将给定的实例方法设为私有(private),然后复制并将它们作为公共(public)方法放入模块的元类中。 extend self 将所有实例方法添加到模块的单例中,保持它们的可见性不变。

module M
extend self

def a; end

private
def b; end
end

module N
def c; end

private
def d; end

module_function :c, :d
end

class O
include M
include N
end

M.a
M.b # NoMethodError: private method `b' called for M:Module
N.c
N.d
O.new.a
O.new.b # NoMethodError: private method `b' called for O
O.new.c # NoMethodError: private method `c' called for O
O.new.d # NoMethodError: private method `d' called for O

关于ruby - "extend self"与 "module_function"相同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2353498/

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