加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

你如何在Ruby中创建分层类名?

发布时间:2020-12-17 03:44:43 所属栏目:百科 来源:网络整理
导读:在 Ruby中,一个名为Foo的类将使用类Foo定义,通过require’foo’使用,并且将存在于$:[0] /foo.rb或类似的东西中. 但是Foo :: Bar怎么样?它会被要求’foo / bar’调用吗?它会住在$:[0] /foo/bar.rb吗?它将如何定义? 我非常习惯于Perl,对于个人项目,我会
在 Ruby中,一个名为Foo的类将使用类Foo定义,通过require’foo’使用,并且将存在于$:[0] /foo.rb或类似的东西中.

但是Foo :: Bar怎么样?它会被要求’foo / bar’调用吗?它会住在$:[0] /foo/bar.rb吗?它将如何定义?

我非常习惯于Perl,对于个人项目,我会创建嵌套类,如Project :: User,Project :: Text :: Index,Project :: Text :: Search等.然后,我会创建一个像Project / Text的文件/Index.pm,它将从包Project :: Text :: Index开始,并通过使用Project :: Text :: Index;来调用.

现在我在Ruby中开始一个项目并且不知道如何做到这一点.出于某种原因,我读过的所有Ruby书籍或文档都没有提到perl风格的分层类命名.当他们提到继承时,它通常是通过一个简单的组成例子,如类Foo<酒吧对我没有帮助.然而,我认为必须有可能做我正在尝试的事情,因为Rails(仅举一个例子)有像ActionView :: Helpers :: ActiveModelFormBuilder这样的类.

解决方法

您在这里结合了几个与实际不相关的概念,即加载路径,继承和范围解析运算符.

当需要(或加载)文件时,require关键字的参数只被视为文件路径并附加到加载搜索路径(.rb扩展名对于require是可选的).继承和嵌套在这里不起作用,任何文件都可以定义它想要的任何东西,例如:

require 'foo' # Looks for "foo.rb" in each of $:
require 'foo/bar' # Looks for "foo/bar.rb" in each of $:

嵌套类(以及模块,变量等)按预期定义,但使用范围解析运算符解析,例如:

class Foo
  def foo; 'foo'; end
  class Bar
    def bar; 'bar'; end
  end
end
Foo.new.foo # => "foo"
Foo::Bar.new.bar # => "bar"

请注意,类嵌套和继承与加载它们的文件的位置无关.对于类/模块结构似乎没有任何明确的约定,因此您可以自由地执行适合您的操作.编程Ruby书的Ruby Language页也可能有用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读