Ruby 从文件中返回最后计算的对象

Ruby 从文件中返回最后计算的对象,ruby,Ruby,是否可以从Ruby文件返回上一次计算的对象 假设我有这样一个文件: # app.rb def foo "Hello, world!" end foo 然后,我会期待类似这样的行为: # other_file.rb require_relative!('foo') # => "Hello, world!" 我们获取所需文件的最后一个计算对象,而不是require\u relative的true返回值 有没有办法让require\u相对-类似行为?这听起来像是一种不好的做法。Ruby文

是否可以从Ruby文件返回上一次计算的对象

假设我有这样一个文件:

# app.rb
def foo
  "Hello, world!"
end
foo
然后,我会期待类似这样的行为:

# other_file.rb
require_relative!('foo') # => "Hello, world!"
我们获取所需文件的最后一个计算对象,而不是
require\u relative
true
返回值


有没有办法让
require\u相对-类似行为?

这听起来像是一种不好的做法。Ruby文件存储的是Ruby代码,而不是数据

按照习惯,您应该使用类或模块创建一个Ruby文件,需要它并从中调用一些函数

# foo.rb
module Foo
  extend self

  def foo
    "bar"
  end
end

# irb
require 'foo'
Foo.foo
#=> bar

否则,正如@sawa所提到的,您应该将文件作为字符串读取并对其求值。这在习惯上是错误的。

不,你不能用正常的方式来做。蛮力方法是将整个文件作为字符串读取,然后
eval
。否则,你需要自己编写一个C库。。。我懂了。为了防止出现某些异常,在对其求值之前,是否可以检查此类字符串的语法?类似于
check(s)#=>true
o=File.open'/app.rb';s=o.read;如果检查,则进行评估。
这应该是一个不同的问题(但它将是一个已经存在的问题的副本)。如果你真的对此感兴趣,你应该问。是的,这不是一件平常的事。但是@sawa展示的方式非常符合我的需要。我只想在求值之前,根据字符串而不是文件(我的意思是没有
ruby-c app.rb
)对语法进行检查。