如何评估另一个ruby文件的代码?



这里有两个ruby文件,如何打开文件和评估code1。

  • code1.rb
a = 10
b = 15
c = a+b
puts "c = #{c}"
  • code2.rb
a= 10
e = c*5+a
puts "e = #{e}"

期望输出:

c = 25
e = 135

您可以使用Kernel#eval来实现您想要的。

但在code1.rb中,您需要删除puts,或将其放在之前,因为puts返回nil。
所以使用这个changes

code1.rb

a = 10
b = 15
c = a+b
puts "c = #{c}"
c

code2.rb

code1 = File.open('code1.rb', 'r').read
c = eval(code1)
a = 10
e = c*5+a
puts "e = #{e}"

c = eval(code1)这个神奇的行将使用code1.rb文件的返回值,然后我们可以在code2.rb

中使用它或者另一种选择,您可以允许您的局部变量被eval方法覆盖,但在这种情况下,您需要在code2.rb中定义它们。考虑这个

code2.rb

a,b,c = [0, 0, 0]
code1 = File.open('code1.rb', 'r').read
eval(code1)
a = 10
e = c*5+a
puts "e = #{e}"

由于局部变量的作用域和求值而起作用。两个变量都是有效的解决方案

最新更新