Ruby:如何将文件加载到交互式Ruby控制台(IRB)中?

111

我正在使用IRB(交互式Ruby控制台)了解如何使用Ruby编程。如果我先在文本编辑器中编写程序,那么我该如何将一个文件加载到控制台中呢?


你想要实现的是这个吗?[1] - pjam
2
source("filename.rb") - Assad Ebrahim
8个回答

104
如果您只需要将一个文件加载到IRB中,则可以使用 irb -r ./your_file.rb 命令将其调用,前提是该文件与IRB在同一目录下。
这个命令会自动加载并要求该文件,并使您立即可以使用它。

4
如果要在每个文件之间添加多个字符而不仅仅是“-r”,那就是我所做的,它可以正常工作。这就是我如何将所有文件加载到irb中,以便我可以在irb中访问我应用程序的所有内容。当然,我使用一个rake脚本将引导文件加载到irb中,这样我只需运行“rake irb”,它就会为我完成所有操作。 - Thermatix
这是我在阅读手册后的第一次尝试,但我使用了-r some_file.rb,30分钟后我发现了这个并添加了./,谢谢xd。 - Alexis
在Ubuntu 16.04中,我移除了点号:irb -r /foo/foo.rb - noobninja
1
这不会让你访问文件中的变量。 - Radon Rosborough

57

我正在Ubuntu 14.04上使用ruby 1.9.3,我可以使用以下命令从当前目录将文件加载到 irb 中:

irb -I . -r foo.rb

这里的foo.rb是我想要从当前目录加载的文件。在ruby的man页面上解释了,-I选项是必需的,以将当前目录(.)添加到ruby的加载路径中。这样可以从当前目录中require文件,这就是irb-r选项所实现的功能。

当我遇到这个问题时,关键的一点并不明显,那就是-I选项。一旦你这样做了,你就可以从irb中调用require 'foo.rb'来加载当前目录中的任何文件。当然,你可以指定任何目录,而不仅仅是.,只需使用-I选项即可。要在加载路径中包含多个目录,请使用冒号(:)分隔它们,例如:

irb -I foo/:bar/:baz/

这个命令将会把目录 foobarbaz 添加到 Ruby 的加载路径中。

最后一种选择是,在使用 require-r 加载文件时使用相对或绝对路径到文件:

irb -r ./foo.rb

或从irb内部:

> require './foo.rb'

你的解决方案的结果与调用“ruby foo.rb”相同,但至少你可以看到发生了什么。但我想保持控制台打开,这样我就可以执行更多命令。有什么想法吗? - Paul Verschoor

37

在命令行中输入irb

然后

require './ruby_file.rb'

假设 ruby_file.rb 文件与此文件在同一个目录下,请相应进行调整。


4
你也可以使用 require_relative。例如,require "./lib/foo"require_relative "lib/foo" 是一样的。 - Dennis
1
.rb is optional, you can write require './ruby_file'. I checked in ruby 1.9.3p551` - AMIC MING
./ 是什么意思? - the12
1
@the12 这是当前目录的相对路径。 - winklerrr

33

两种方法:

  1. 加载源代码 而不运行程序 -- 这可以访问所有变量和函数:

source("filename.rb")

  1. 运行程序,然后进入交互模式 -- 这只能访问函数,而不能访问变量:

require("filename.rb")


1
这似乎回答了如何重新加载脚本的问题。我一直在使用require,但它似乎不会重新加载脚本(对原始源代码的任何修改都不会反映在您的会话中),而source似乎可以反映对原始脚本的更改。 - Michael Welch

4
这取决于你的Ruby版本。Ruby 1.8包括当前路径,而Ruby 1.9则不包括。使用$:来判断是否包含路径。因此,在Ruby 1.9中,您必须使用完整路径,这总是一个安全的选择。
然后,您可以使用requireload来包含文件。 require不需要添加文件后缀名即可找到它,并且只会包含一次文件。大多数情况下应该使用require而不是load
如果您将使用Ruby 1.8,请查看将目录添加到$LOAD_PATH(Ruby)

2

在文本编辑器中输入Ruby代码。

将其保存为扩展名.rb(例如:demo.rb)。

在Linux中,打开终端,然后将目录更改为该文件的当前位置(使用cd命令更改目录)。

之后,键入irb和您的文件名(不要忘记包括您的扩展名(.rb))。

click here to see loading a ruby file using irb

在这张图片中,我加载了一个简单的 Ruby 文件,它只打印出 "ruby"。

好的回答,但我建议将终端会话发布为文本而不是图像 - undefined

0

将路径加载到irb的另一种方法是只需输入require,然后将文件拖放到终端中。 - 在Linux Mint上进行过测试。


Linux Mint。抱歉,我应该加上这个。 - Mike Kennedy

0

对于那些想要从不同目录加载 .rb 文件的人,只需将目录的字符串表示添加到 $: 变量中即可。

> $: << "/directory/to/the/required/rb/file"
> require "file"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接