我如何可以访问我的IRB需要一个Ruby文件中定义的变量?我如何可以访问我的IRB需要一个Ruby文

2019-05-12 02:32发布

该文件welcome.rb包含:

welcome_message = "hi there"

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

require './welcome.rb'

puts welcome_message 

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

什么是预定义变量带来,并具有当你完成初始化工作的最佳方法require的东西进入你的IRB会议? 全局变量似乎并不像正确的道路。

Answer 1:

虽然这是事实,你不能访问所需的文件中定义的局部变量,你可以访问常量,您可以访问存储在你必须在两种情况下访问对象什么。 因此,也有共享信息的一些方法,这取决于你的目标。

最常见的解决方案可能是定义一个模块,并把你的共享价值在那里。 因为模块是常数,你就可以访问它在要求范围内。

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

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

你也可以把值类中,以几乎相同的效果。 或者,你可以只把它定义在文件中的常数。 由于默认上下文是类对象的一个​​对象,称为主,也可以定义一个方法,实例变量,或者在主类变量。 所有这些方法最终是使“全局变量”,或多或少的有着本质的不同方式,以及可能不是最佳的大多数用途。 在另一方面,对于具有很好的界定范围小项目,他们可能会被罚款。

# 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


Answer 2:

你不能访问包含文件中定义的局部变量。 您可以使用高德:

# in welcome.rb
@welcome_message = 'hi there!'

# and then, in irb:
require 'welcome'
puts @welcome_message
#=>hi there!


Answer 3:

我认为最好的办法是这样定义一个类

class Welcome
  MESSAGE = "hi there"
end

然后在IRB你可以打电话给你这样的代码:

puts Welcome::MESSAGE


Answer 4:

这至少应该能够从IRB的经验:

def welcome_message; "hi there" end


文章来源: How can I access a variable defined in a Ruby file I required in IRB?