我正在使用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
,但它没有成功。有什么想法吗?
答案 0 :(得分:1)
在您的演示文件中,变量person
和c
都是局部变量,无法从该上下文外部访问。如果您需要demo.rb
进入irb会话,行为应该是相同的; 1}}和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