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

时间:2015-02-26 04:00:30

标签: ruby rake ruby-prolog

我正在使用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

错误:

  

所有的名字都是:rake aborted! NameError:未定义的局部变量   或方法`人' for main:Object

我希望通过以某种方式传回一个物体来解决这个问题。我尝试访问c,但它没有成功。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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

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

person

# 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