这里有两个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}"
由于局部变量的作用域和求值而起作用。两个变量都是有效的解决方案