ruby - 文件私有(private)方法

标签 ruby visibility

在 ruby​​ 中,有没有办法定义一个方法,该方法对文件(或模块)中的每个类可见,但对需要该文件的文件不可见?

相关,但不完全相同:我们能否重新定义一个方法(例如标准库类中的方法),以便该重新定义仅在当前文件中可见?所有其他文件应查看原始定义。

最佳答案

没有也没有。

Ruby 中唯一的可见性是公共(public)的、 protected 和私有(private)的。没有文件级可见性的概念。你也许可以“作弊”并做这样的事情:

# 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

但这是个坏主意。不同目录中的同名文件可能 有效。它也不是真正的可见性,而是在方法本身中强制执行。

不过,实际上,您应该将每个类都放在它们自己的文件中。它使组织更好。此外,您不应依赖公共(public)/ protected /私有(private)。您始终可以只使用 send 来调用私有(private)方法,但上面的打破这种期望。如果您的代码的用户真的想用您的代码做一些事情,那么让他们做这件事几乎没有任何意义,这就是动态语言的本质。如果您不记录方法,大多数用户永远不会知道它在那里 :P

关于你的第二个问题,同一个类中不可能有两个同名的方法,但可见性不同,第二个方法总是会覆盖原来的方法。你可以做一些类似于我上面所做的事情,并根据条件运行不同的代码而不是提高,但如上所述,我真的不认为这是一个好主意。

关于ruby - 文件私有(private)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10535319/

相关文章:

python - 在同时运行的两个函数中访问同一对象的属性

java - JDialog 不可见

java - JFrame 和可见性 : issue with fading out and getting a screenshot

javascript - ruby 到 javascript,可能吗?如何?

Ruby 组合方法的 Python 等价物

android - 如何在自己的 shell 中从 Ruby 执行 shell 命令?

php - 子类访问父类的私有(private)方法?

javascript - 使用复选框、切换相关下拉列表和 DIV 可见性启用下拉选择

ruby - 什么是受污染的对象,我们什么时候应该清除它们?

ruby - 确定邻居是否存在?