在ruby中,有没有办法定义一个方法,该方法对文件(或模块)中的每个类都可见,但对需要该文件的文件不可见?
相关,但不完全相同:我们可以重新定义一个方法(例如标准库的类中的方法),以便此重新定义仅在当前文件中可见吗?所有其他文件应查看原始定义。
不,不。
Ruby 中唯一的可见性是公共的、受保护的和私有的。没有文件级可见性的概念。你也许可以“作弊”并做这样的事情:
# In some file foobar.rb
class Foo
def to_bar
Bar.new.file_private
end
end
class Bar
def file_private
raise unless caller[0].split(':')[0] == __FILE__
end
end
# In IRB or some other file
Foo.new.to_bar #=> nil
Bar.new.file_private #=> RuntimeError
但这是个坏主意。不同目录下的同名文件might工作。它也不是真正的可见性,而是在方法本身中强制执行它。
不过,实际上,您应该将每个类都放在自己的文件中。它使组织变得更好。此外,您不应该依赖公共/受保护/私有。你总是可以使用send
调用私有方法,但是上面breaks那个期望。如果你的代码的用户真的想用你的代码做一些事情,那么让他们这样做几乎没有任何作用,这就是动态语言的本质。如果您不记录方法,大多数用户甚至不会知道它的存在:P
.
至于你的第二个问题,不可能在同一个类中具有不同可见性的两个同名方法,第二个方法总是会覆盖原始方法。您可以执行与我上面所做的类似的操作,并根据条件运行不同的代码而不是引发,但如上所述,我真的不认为这是一个好主意。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)