我正在编写用于管理Github问题的控制台实用程序,但我遇到了undefined method
错误。
我的应用程序采用以下方式构建
gissues.rb # includes all files in subfolders
Gissues
github.rb #Gissues::Github general github stuff
commands.rb #Gissues::commands subclass of Thor (whatisthor.com), general command stuff
cli.rb #subclass of commands, lists command shortcuts and subcommands
commands
user.rb #Command::User subclass of Gissues::Commands holds logic for github user related commands like signin, signout, whoami
github
user.rb #Github::User subclass of Gissues::Github holds logic for communicating with github for authentication (checking credentials)
我定义了在github文件夹中的user.rb中与Github通信的方法。我想在命令文件夹中定义的user.rb中使用这些方法,但是当我这样做时,它似乎超出了范围,我得到了一个未定义错误的方法。
user.rb(命令)看起来像这样
module Gissues
class Command::User < Gissues::Command
desc "signin", "Starts loging sequence"
def signin
Gissues::Github::User::request_token
end
end
end
我收到以下错误
/Users/someone/RubymineProjects/Gissues/lib/gissues/commands/user.rb:9:in `signin': undefined method `request_token' for Gissues::Github::User:Class (NoMethodError)
我做错了什么? 提前致谢
编辑:此图片可能会使结构更清晰
答案 0 :(得分:0)
如果您的顶级模块对所有子模块都有明确的require
,那么这不会成为问题。如果您直接加载底层模块,则不会真正定义任何其他模块。那就是问题出现的地方。
典型模块如下:
module Gissues
require 'gissues/command'
require 'gissues/user'
end
这些需要按依赖顺序列出。尽管不推荐,但可以使用autoload
来完成相同的任务。
只要它们按照正确的顺序加载,你就应该好好去。
值得注意的是,方法应该在方法之前用点Gissues::Github::User.request_token
调用。 ::
表示法通常保留用于类名或常量,例如Gissues::CONST
与Gissues.method_name
。