如何访问不同文件中另一个 class 的成员

How to access members of another class in a different file

我正在使用 ruby-prolog。我想 运行 一个查询事实的任务。

demo.rb:

require 'ruby-prolog'

c = RubyProlog::Core.new
c.instance_eval do

person['name','brian'].fact
person['name','James'].fact

puts 'all the names are: '
p query(person['name', :A])

end

效果很好。现在我想 运行 Rake 中的查询。这是个问题,因为我不知道如何从其他文件访问 person[]

Rakefile.rb:

require_relative 'demo.rb'

task :test do |variable|
  puts 'all the names are: '
  p query(person['name', :A])
end

错误:

all the names are: rake aborted! NameError: undefined local variable or method `person' for main:Object

我希望这可以通过以某种方式传回对象来解决。我尝试访问 c,但没有成功。有什么想法吗?

在您的演示文件中,变量 personc 都是局部变量,无法从该上下文外部访问。如果您要求 demo.rb 进入 irb 会话,行为应该是相同的; cperson 都不会被定义。

在 rake 任务中处理这个问题的一个好方法是将任何和所有逻辑都放在 rake 任务本身之外,并且只调用另一个负责该任务的对象。对于一个快速而肮脏的例子,您可以这样更改您的代码:

# demo.rb
require 'ruby-prolog'

class Demo
  def self.run_demo
    # Existing code:

    c = RubyProlog::Core.new
    c.instance_eval do

      person['name','brian'].fact
      person['name','James'].fact

      puts 'all the names are: '
      p query(person['name', :A])

    end
  end
end

# Rakefile.rb
require_relative 'demo.rb'

task :test do
  Demo.run_demo
end