如何访问不同文件中另一个 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
,但没有成功。有什么想法吗?
在您的演示文件中,变量 person
和 c
都是局部变量,无法从该上下文外部访问。如果您要求 demo.rb
进入 irb 会话,行为应该是相同的; c
和 person
都不会被定义。
在 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
我正在使用 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
,但没有成功。有什么想法吗?
在您的演示文件中,变量 person
和 c
都是局部变量,无法从该上下文外部访问。如果您要求 demo.rb
进入 irb 会话,行为应该是相同的; c
和 person
都不会被定义。
在 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