提问人:mycupisoverflowing 提问时间:2/10/2021 更新时间:2/11/2021 访问量:31
我在备用类的方法中调用属于某些类的方法时遇到问题
I'm having trouble calling methods belonging to certain classes within methods of an alternate class
问:
这是我第一次问问题,所以如果我能做得更好,请告诉我。
我有三个班级,所有班级都需要一起工作。下面是一个示例:
class CLI
def self.start
s=Scraper.new
puts "Welcome to your basic music theory coordinator!"
puts ""
puts "If you want to check out a key, choose from the list below by typing the key as you see it listed."
puts "*not yet functional* If you want to generate a random chord progression in a certain key, just pick the key from the list and say generate"
puts ""
puts "Pick a key:"
puts " "
puts "Major:"
puts s.all_scale_names[0]
puts " "
puts "Minor:"
puts s.all_scale_names[1]
s.key_information_creator
end
end
CLI.start
尝试调用CLI.start时收到的错误如下:
9: from lib/comman_line_interface.rb:1:in `<main>'
8: from lib/comman_line_interface.rb:1:in `require_relative'
7: from /home/code/cli-test/test-cli/lib/scraper.rb:4:in `<top (required)>'
6: from /home/code/cli-test/test-cli/lib/scraper.rb:4:in `require_relative'
5: from /home/code/cli-test/test-cli/lib/song.rb:5:in `<top (required)>'
4: from /home/code/cli-test/test-cli/lib/song.rb:5:in `require_relative'
3: from /home/code/cli-test/test-cli/lib/key.rb:6:in `<top (required)>'
2: from /home/code/cli-test/test-cli/lib/key.rb:6:in `require_relative'
1: from /home/code/cli-test/test-cli/lib/comman_line_interface.rb:31:in `<top (required)>'
/home/code/cli-test/test-cli/lib/comman_line_interface.rb:12:in `start': uninitialized constant CLI::Scraper (NameError)
我想我需要做一些叫做命名空间的事情,但我不完全确定。关于如何解决这个问题并让我的班级很好地协同工作的一些方向或选项将不胜感激。谢谢。
答:
0赞
Todd A. Jacobs
2/11/2021
#1
了解堆栈跟踪
堆栈跟踪非常简单。它告诉你:
- 您尚未成功要求 Scraper 类/模块。
- 当前命名空间中没有定义 CLI::Scraper。
- 您正在对不在范围内或代码中根本不存在的对象调用方法。
调试代码的步骤
解决上述问题,看看这能给你带来什么。首先,在调试程序时,您应该考虑一些具体事项:
您的 CLI 类无法在其命名空间之外引用 Scraper 类/模块,除非您告诉它在哪里查看导入模块或在公共模块中命名它们,以便您可以显式引用 Foo::Scraper 和 Foo::CLI。
无论如何,最好将 Scraper 注入到 CLI 初始化中,但您还没有展示足够的代码来提供有意义的示例。
去掉所有不必要的代码,直到你可以让基本的东西工作。例如:
class CLI def self.start defined? Scraper end end
继续重构,直到您的最小 CLI#start 返回而不是 .
"constant"
nil
评论
1赞
mycupisoverflowing
2/11/2021
太棒了,谢谢你的帮助。很抱歉没有提供足够的代码,下次我一定会这样做。再次感谢
上一个:类内的命名空间方法
下一个:Ruby 中同名的模块和类
评论