ruby - 如何访问 IRB 所需的 Ruby 文件中定义的变量?

标签 ruby variables scope irb requires

文件 welcome.rb 包含:

welcome_message = "hi there"

但是在 IRB 中,我无法访问我刚刚创建的变量:

require './welcome.rb'

puts welcome_message 

# => undefined local variable or method `welcome_message' for main:Object

当您在 IRB session 中require 某些内容时,引入预定义变量并完成初始化工作的最佳方法是什么?全局变量似乎不是正确的路径。

最佳答案

虽然您确实无法访问所需文件中定义的局部变量,但您可以访问常量,并且可以访问存储在对象中的任何内容,并且您可以在两种上下文中访问这些内容。因此,根据您的目标,有几种共享信息的方法。

最常见的解决方案可能是定义一个模块并将您的共享值放入其中。由于模块是常量,您将能够在需要的上下文中访问它。

# in welcome.rb
module Messages
  WELCOME = "hi there"
end

# in irb
puts Messages::WELCOME   # prints out "hi there"

您也可以将值放在类中,效果大致相同。或者,您可以将其定义为文件中的常量。由于默认上下文是 Object 类的对象,称为 main,您还可以在 main 上定义方法、实例变量或类变量。所有这些方法最终都或多或少地成为制作“全局变量”的本质不同的方法,并且对于大多数目的而言可能不是最佳的。另一方面,对于范围非常明确的小型项目,它们可能没问题。

# in welcome.rb
WELCOME = "hi constant"
@welcome = "hi instance var"
@@welcome = "hi class var"
def welcome
  "hi method"
end


# in irb
# These all print out what you would expect.
puts WELCOME
puts @welcome
puts @@welcome
puts welcome

关于ruby - 如何访问 IRB 所需的 Ruby 文件中定义的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2699324/

相关文章:

html - 如何防止 Nokogiri 对 HTML 片段中的实体进行编码

ruby - 使用 Thor 创建嵌套子命令

macos - 如何设置 os x 中的应用程序使用的 $PATH

javascript - 我无法使用我的函数更改或更新变量

ruby-on-rails - 在 Ruby 单元测试中,如何断言一个字符串包含某个子字符串?

ruby - 无需 Chef 或 Knife 从 metadata.rb 生成 metadata.json

javascript - 如何将类语法内部的 JSON 发送到 API?

c++ - 未在范围内声明,即使在 .h 中声明

变量作用域的推荐方法

javascript - 从第一个对象创建的另一个对象中访问对象原型(prototype)的变量