ruby中的“require”方法

为了创建可重用的组件,即可以在其他程序中轻松使用的组件,编程语言必须能够在运行时顺利导入代码。在Ruby中,require方法用于加载另一个文件并执行其所有语句。这用于导入文件中的所有类和方法定义。除了简单地执行文件中的所有语句外,require方法还跟踪以前需要哪些文件,因此不需要两次文件。...

为了创建可重用的组件,即可以在其他程序中轻松使用的组件,编程语言必须能够在运行时顺利导入代码。在Ruby中,require方法用于加载另一个文件并执行其所有语句。这用于导入文件中的所有类和方法定义。除了简单地执行文件中的所有语句外,require方法还跟踪以前需要哪些文件,因此不需要两次文件。

Keyboard close-up

使用“require”方法

require方法将所需文件的名称作为字符串,作为单个参数。这可以是文件的路径,如./lib/some_library.rb,也可以是缩写名,如some_library。如果参数是路径和完整的文件名,require方法将在那里查找该文件。但是,如果参数是一个缩短的名称,require方法将在系统上的许多预定义目录中搜索该文件。使用缩写名称是使用require方法的最常见方式。

下面的示例演示如何使用require语句。文件test_library.rb位于第一个代码块中。此文件打印一条消息并定义一个新类。第二个代码块是文件test_program.rb。该文件使用require方法加载test_library.rb文件,并创建一个新的TestClass对象。

puts "test_library included" class TestClass def initialize puts "TestClass object created" end end #!/usr/bin/env ruby require 'test_library.rb' t = TestClass.new

避免名称冲突

在编写可重用组件时,最好不要在任何类或方法之外或使用$prefix在全局范围内声明许多变量。这是为了防止“名称空间污染”。如果声明的名称太多,另一个程序或库可能会声明相同的名称并导致名称冲突。当两个完全不相关的库开始意外地改变彼此的变量时,事情就会破裂——看起来是随机的。这是一个很难追踪的bug,最好是避免它。

为了避免名称冲突,可以将库中的所有内容都包含在module语句中。这将要求人们使用完全限定的名称来引用您的类和方法,例如MyLibrary::my_方法,但这是值得的,因为名称冲突通常不会发生。对于希望将您的所有类和方法名称都包含在全局范围内的人,他们可以使用include语句来实现这一点。

下面的示例重复前面的示例,但将所有内容都包含在MyLibrary模块中。给出了my_program.rb的两个版本;一个使用include语句,另一个不使用。

puts "test_library included" module MyLibrary class TestClass def initialize puts "TestClass object created" end end end #!/usr/bin/env ruby require 'test_library2.rb' t = MyLibrary::TestClass.new #!/usr/bin/env ruby require 'test_library2.rb' include MyLibrary t = TestClass.new

避免绝对路径

因为可重用组件经常被移动,所以最好不要在require调用中使用绝对路径。绝对路径是类似于/home/user/code/library.rb的路径。您会注意到,文件必须位于该确切位置才能工作。如果脚本被移动或主目录发生更改,则require语句将停止工作。

通常在Ruby程序的目录中创建一个./lib目录,而不是绝对路径。./lib目录被添加到$LOAD_PATH变量中,该变量存储require方法搜索Ruby文件的目录。之后,如果文件my_library.rb存储在lib目录中,则可以使用简单的require'my_library'语句将其加载到程序中。

以下示例与前面的test_program.rb示例相同。但是,它假定test_library.rb文件存储在./lib目录中,并使用上述方法加载它。

#!/usr/bin/env ruby $LOAD_PATH << './lib' require 'test_library.rb' t = TestClass.new

  • 发表于 2021-09-12 23:04
  • 阅读 ( 163 )
  • 分类:IT

你可能感兴趣的文章

红宝石(ruby)和python(python)的区别

...数可以传递给另一个函数。 添加模块 Ruby使用关键字require来添加模块。 Python使用关键字import来添加必要的模块。 匿名函数 Ruby包含块、proc和lambda。 Python包含lambdas。 主要Web框架 rubyonrails是一个基于Ruby的web框架。 Django...

  • 发布于 2020-10-19 17:41
  • 阅读 ( 356 )

最适合新手的ruby互动介绍

...教您语言的绝对基本构建块(包括数字、字符串、属性和方法)。您只需要键入像“2+6”这样简单的东西,看看Ruby如何处理数学操作符。 ...

  • 发布于 2021-03-13 09:52
  • 阅读 ( 227 )

使用静态站点生成器快速构建网站

...服务器上意味着你只需要更新一次。 创作中的平**立性:如果您在各种设备上工作,那么远程SSG意味着您只需要在本地担心创作。既然你是用纯文本创作的,你几乎可以用任何你喜欢的设备。例如,您可以在Android*...

  • 发布于 2021-03-25 19:23
  • 阅读 ( 317 )

python(python)和红宝石(ruby)的区别

...作。 实例化 –实例化是从类创建对象实例的过程。Ruby中的实例变量是严格私有的,这意味着它们只能通过方法访问,因此需要方法值。实例变量定义“getter”和“setter”方法来访问属性,前者是属性的名称,后者以等号作为...

  • 发布于 2021-06-25 22:26
  • 阅读 ( 260 )

ruby for kids教你的孩子(和你自己)ruby编程语言

...序观看屏幕播放,了解Ruby编程的各个方面,重点是gosu库中的游戏开发。这是一种有趣的方法来教你的孩子如何编程,如果你还不是Ruby专家,它甚至可以帮助你学习语言。Ruby For childs与Hakety-Hack(另一个很棒的Ruby学习资源)有几...

  • 发布于 2021-07-25 04:52
  • 阅读 ( 187 )

ruby中的全局变量

全局变量是可以从程序中的任何位置访问的变量,而不考虑范围。它们以$(美元符号)字符开头表示。然而,全局变量的使用通常被认为是“非Ruby”,并且您很少看到它们。 定义全局变量 全局变量的定义和使用与任何其...

  • 发布于 2021-09-05 06:00
  • 阅读 ( 185 )

使用logger库-如何在ruby中编写日志消息

...器对象的任何消息都将写入日志文件。 #!/usr/bin/env ruby require 'logger' log = Logger.new('log.txt') log.debug "Log file created" 优先事项 每个日志消息都有一个优先级。这些优先级使得在日志文件中搜索严重消息变得简单,并且让logger对...

  • 发布于 2021-09-12 07:28
  • 阅读 ( 205 )

如何在ruby中组合数组(combine arrays in ruby)

...可能希望避免这种情况。对象创建不是免费的,这些操作中的每一个都会创建第三个数组。如果要在位修改数组,使用新元素使其变长,可以使用&amp;lt&amp;书信电报;操作人员然而,如果你尝试这样的事情,你会得到意想不到的...

  • 发布于 2021-09-12 07:29
  • 阅读 ( 230 )

ruby编程语言初学者指南

...不可能创建一个非常重要的Ruby程序。Ruby在原始计算任务中的性能并不总是和其他类似的脚本语言一样好。也就是说,未来的版本将解决这些问题,而JRuby等替代实现可以作为解决这些问题的解决方案。 ruby是如何使用的? Ruby...

  • 发布于 2021-09-12 07:30
  • 阅读 ( 214 )

使用命令行运行ruby脚本

...符(如|、&amp;lt;和&amp;gt;)重定向输入和输出。本教程中的命令在Windows、Linux和OSX上是相同的。 打开命令提示符 要在Windows上启动命令提示符,请转到开始-&gt;运行。在出现的对话框中,在输入框中输入cmd,然后按OK。 要...

  • 发布于 2021-09-17 03:13
  • 阅读 ( 204 )
hg71sno7k36
hg71sno7k36

0 篇文章

相关推荐