gpt4 book ai didi

ruby - 定义仅在特定模块/类中可见的方法

转载 作者:太空宇宙 更新时间:2023-11-03 16:59:19 25 4
gpt4 key购买 nike

有没有办法在模块/类 A 上定义一个方法 foo ,这样它就只能在模块/类 B 中可见>,或者它的后代?下图说明了这种情况:

A.new.foo # => undefined

class B
A.new.foo # => defined
def bar
A.new.foo # => defined
end
def self.baz
A.new.foo # => defined
end
end

class C < B
A.new.foo # => defined
def bar
A.new.foo # => defined
end
def self.baz
A.new.foo # => defined
end
end

我直觉上感觉精炼在精神上很接近,但它似乎并没有达到我想要的效果。

最佳答案

这行得通。 ^_^

class A
private
def foo
"THE FOO !!!"
end
end

class B < A
public :foo

def initialize
@foo = self.foo
end
end

puts "A.new.foo #{ A.new.foo rescue '... sorry, no.' }"
=> A.new.foo ... sorry, no.

puts "B.new.foo #{ B.new.foo rescue '... sorry, no.' }"
=> B.new.foo THE FOO !!!

如果你想在所有子类中使用 A.new.foo 仍然使用 A 类名,那么你应该使用以下内容。

class A
private
def foo
"THE FOO !!!"
end
end

class B
class A < A
public :foo
end

attr_reader :c, :d

def c
A.new.foo
end

def d
A.new.foo
end
end

puts "A.new.foo #{ A.new.foo rescue '... sorry, no.' }"
=> A.new.foo ... sorry, no.

puts B.new.c
=> THE FOO !!!

puts B.new.d
=> THE FOO !!!

关于ruby - 定义仅在特定模块/类中可见的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23214842/

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