我正在开发一个应用程序来自动测试SQL注入漏洞。它目前被命名为Deft,用于大学项目。
我希望能够从命令行或交互式控制台运行测试。我正在编写几个类。 (Deft::Cli
,Deft::Console
等。)
这就是我想我想做的事。
module Deft
module App
attr_accessor :origin
@origin = { "host" => "localhost", "port" => "80" }
end
end
module Deft
class Console
include App
def initialize
puts origin
end
end
end
示例已经简化,但关键是默认值(和结构)在Deft::App
模块中定义。
我可以说的问题是,尽管来自控制台实例内部的methods.grep(/origin/)
确实让我["origin=", "origin"]
调用origin
,但会返回nil
。而不是我在Deft::App
中定义的值。它有意义,它不起作用,但我不知道如何使它工作。
答案 0 :(得分:3)
也许我太简单地采用了简化的例子,但解决它的一种方法是摆脱attr_accessor
类方法调用,只需将origin
作为常量Origin
或ORIGIN
。
答案 1 :(得分:1)
这个怎么样?
module Deft
class DefaultConsole
attr_accessor :origin
def initialize
@origin = {'host' => 'localhost', 'port' => 80}
end
end
class Console < DefaultConsole
def initialize
super
puts origin
end
end
end
Deft::Console.new
# => {'host' => 'localhost', 'port' => 80}
答案 2 :(得分:0)
试试这样:
module Deft
module App
attr_accessor :origin
def init
@origin = { "host" => "localhost", "port" => "80" }
end
end
end
module Deft
class Console
include App
def initialize
init
puts origin
end
end
end
Deft::Console.new
答案 3 :(得分:0)
感谢大家添加了他们的意见。我将继续回答我自己的问题,这是我所希望的。
module Deft
module App
@@origin = { "host" => "localhost", "port" => "80" }
def origin ; @@origin ; end
def origin=(args) ; @@origin=(args) ; end
end
end
如果有人想使用attr_accesor复制并清理它,那么我很乐意将其编辑回我的问题并接受他们的回答。