在Ruby脚本中包含另一个脚本

时间:2015-11-19 21:56:11

标签: ruby

我们说我有以下脚本。

script1.rb

x=1

script2.rb

# Something like: import script1
y=2
puts x+y

是否可以"合并"这些脚本,即以某种方式" import" script1.rb进入script2.rb,以便运行script2.rb打印" 3"?

我已经尝试了require_relativeload等语句,但结果是:

  

b.rb:4:在<main>': undefined local variable or method x&#39;对于   main:Object(NameError)

2 个答案:

答案 0 :(得分:2)

是:

require_relative 'yourOtherFile'

你不需要在最后处理.rb。 &#34;亲戚&#34; require_relative中的部分意味着&#34;查看我在另一个文件中的同一文件夹&#34;

如果要从文件B中的文件A访问一个变量,则必须使其成为全局变量($x = 5)。这将起作用,但不是组织代码的好方法(因为它构成了一个全局范围被许多不同变量污染的环境。

您应该将代码组织到类中:

class Planet
  @@x = 0

  def self.doStuffToX
    @xx += 4
  end

  def self.getX
    @@x
  end  
end

您可以要求此文件,然后使用Plant.getXPlant.doStuffToX来访问和更改x

答案 1 :(得分:1)

是的,使用require_relative,但它只适用于全局变量和常量。这是一件好事。

  

加载的源文件中的任何常量或全局变量都将在调用程序的全局命名空间中可用。但是,局部变量不会传播到加载环境。

<强> script1.rb

X = 1

<强> script2.rb

require_relative 'script1.rb'

y = 2
puts X + y

要访问常量,这很好,没有什么可以改变它。

但是如果你想改变x那么它必须是一个全局变量$x并且那不好。应避免使用全局,因为很难控制它们的使用或修改方式。您应该将script1.rb中的代码重新设计为类。