将当前类属性注入新类的构造函数中

时间:2018-06-06 08:43:35

标签: ruby class

我正在尝试创建一个初始化WEBrick服务器的类,该服务器包含一个WEBrick servlet,如果没有给出请求路径,它将返回一些默认的HTML字符串。

主要问题是我将当前类的实例变量注入到新类的构造函数中,这是我不知道该怎么做的事情。

class MyServer
  def initialize(defaultHTML)
    @defaultHtml = defaultHTML
    @server = WEBrick::HTTPServer.new(
      :Port => 12357,
      :DocumentRoot = Dir.pwd
    )
    defaultGetHandler = Class.new(WEBrick::HTTPServlet::AbstractServlet) do
      def do_GET(request,response)
        if request.path.to_s == "/"
          response.body = #SOMEHOW get @defaultHTML here...?
        end
      end
    end
    @server.mount "/", defaultGetHandler
  end
end

我希望这是可能的。我已经尝试过使用全局变量,这些变量确实可行,但它并不完全理想。

2 个答案:

答案 0 :(得分:2)

看来print (df['SCORE'] > 5) 0 False 1 True 2 False 3 True 4 False 5 True 6 False 7 False 8 True 9 False 10 True 11 True 12 False 13 False 14 True 15 False 16 False 17 True Name: SCORE, dtype: bool 已经为此提供了适当的界面(Documentation),例如

WEBrick::HTTPServlet::AbstractServlet

然后 class DefaultGetHandler < WEBrick::HTTPServlet::AbstractServlet def initialize(server,default_html) super(server) @default_html = default_html end def do_GET(request,response) if request.path.to_s == "/" response.body = @default_html end end end 变为

MyServer

这将允许您避免现在正在创建的所有匿名类定义,并为您提供更清晰的自定义类实现。如果您想维护目前的封装,可以在class MyServer def initialize(default_html) @server = WEBrick::HTTPServer.new( :Port => 12357, :DocumentRoot = Dir.pwd ) @server.mount "/", DefaultGetHandler, default_html end end 内命名空格DefaultGetHandler

答案 1 :(得分:1)

注意:@engineersmnky的答案对于您的特定用例来说要好得多。对于寻找类似但不是useHTML相关问题的解决方案的人来说,这个答案可能会引起人们的兴趣。

你可以定义一个类实例变量访问器,并在动态创建类之后传入WEBrick::HTTPServlet::AbstractServlet,如下所示:

defaultHtml