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

Ruby类加载机制

发布时间:2020-12-17 03:05:08 所属栏目:百科 来源:网络整理
导读:我开始使用 Ruby编程语言,在开始研究Rails框架之前,我有兴趣深入理解它. 我目前有点失望,因为每个人都只关心Rails框架,而且语言的其他方面都没有深入讨论,比如它的类加载机制. 考虑到我开始做一些桌面/控制台实验,我想更好地理解以下事项: 将每个Ruby类放在
我开始使用 Ruby编程语言,在开始研究Rails框架之前,我有兴趣深入理解它.

我目前有点失望,因为每个人都只关心Rails框架,而且语言的其他方面都没有深入讨论,比如它的类加载机制.

考虑到我开始做一些桌面/控制台实验,我想更好地理解以下事项:

>将每个Ruby类放在一个单独的Ruby文件中是一个好习惯吗? (* .RB)
>如果我有,让我们说.. 10个类…并且所有这些都相互引用,通过实例化彼此并调用彼此的方法,我应该在每个文件中添加一个’require’语句来说明需要哪些类.该文件中的类? (就像我们在每个Java类文件中使用’import’语句一样?)
>在类声明之前或之后(内部)放置’require’语句是否有区别?
>什么可以被认为是一个适当的Ruby程序的“切入点”?它告诉我任何.rb脚本都足够了,因为该语言没有像C或Java这样的约定,我们总是需要一个’main’函数的方法.
>类加载是否被认为是执行Ruby程序的“阶段”?我们是否应该在开始时加载应用程序所需的所有类?
>当我们运行需要它们的代码时,解释器本身不应该负责查找和加载类吗?通过搜索$LOAD_PATH变量中的路径,就像Java用它的$CLASSPATH一样?

谢谢.

解决方法

一般而言,为每个Ruby类创建一个单独的.rb文件是一个很好的做法,除非这些类具有实用性,并且太过微不足以保证分离.这个实例将是一个自定义的Exception派生类,将它放在一个单独的文件中会比它的价值更麻烦.

传统认为??类的名称和文件名是相关的.在类被称为ExampleClass的地方,该文件名为example_class,它的“下划线”版本.在某些情况下,你会坚持这个惯例,但只要你保持一致就不应该有问题.如果你遵循惯例,Rails ActiveSupport自动加载器将帮助你很多,所以很多人都遵循这种做法.

同样,您需要将应用程序组织到lib和bin等文件夹中,以便将命令行脚本与后端库分开.命令行脚本通常不具有.rb扩展名,而库应该是.rb扩展名.

在需要时,应谨慎使用.如果正确构建库文件,一旦在顶级文件上调用require,它们就会自动加载.这是通过自动加载功能完成的.

例如,lib / example_class.rb可能如下所示:

class ExampleClass
  class SpecialException < Exception
  end

  autoload(:Foo,'example_class/foo')

  # ...
end

您可以在单独的目录或文件下组织其他内容,例如lib / example_class / foo.rb,它们可能包含:

class ExampleClass::Foo
  # ...
end

您可以将自动加载链接一直保持下去.这具有仅加载实际引用的模块的优点.

有时您会希望将需求推迟到类实现中的某个位置.如果您希望避免在繁重的库中加载,除非使用特定功能,此功能在普通情况下不可能使用,否则这非常有用.

例如,您可能不想加载YAML库,除非您正在进行一些调试:

def debug_export_to_yaml
  require 'yaml'

  YAML.dump(some_stuff)
end

如果查看常见Ruby gem的结构,“入口点”通常是库的顶层或包含此库的实用程序脚本.因此,对于示例ExampleLibrary,您的入口点将是lib / example_library.rb,其结构将包括其余的按需.您可能还有一个脚本bin / library_tool可以为您执行此操作.

至于什么时候加载东西,如果有很高的机会被使用,请提前加载它以便提前付出代价,所以称为“急切加载”.如果它被使用的可能性很小,可以根据需要加载它,或者在它被调用时保持“延迟加载”.

看看一些简单但流行的宝石的来源,以了解大多数人如何构建他们的应用程序.

(编辑:李大同)

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

    推荐文章
      热点阅读