为什么可以';我不能访问ruby初始化返回对象中的方法吗?

为什么可以';我不能访问ruby初始化返回对象中的方法吗?,ruby,sketchup,Ruby,Sketchup,我制作了一个显示对话框的类,web对话框有一些方法,比如show,close。在initialize方法中,我返回web对话框对象,并调用: $loginUI=LoginUI.new $loginUI.show # it tell me no this method 为什么我不能访问WebDialog方法并获取对象作为返回值,除非我将该方法重写如下 class LoginUI @@me=nil def initialize() @@me=intiLoginDlg() @

我制作了一个显示对话框的类,web对话框有一些方法,比如
show
close
。在
initialize
方法中,我返回web对话框对象,并调用:

$loginUI=LoginUI.new
$loginUI.show # it tell me no this method
为什么我不能访问
WebDialog
方法并获取对象作为返回值,除非我将该方法重写如下

class LoginUI
  @@me=nil
  def initialize()
    @@me=intiLoginDlg()
    @@me.show()
    return @@me
  end
  def intiLoginDlg()
    @dl = UI::WebDialog.new("aaa", true, "bbb", 50, 50, 0, 0, false);
    #...do something
    return @dl
  end
  ################################# I must add this method to trigger it??
  def isShow()
    return @@me.visible?
  end
  def show()
    @@me.show
  end
  def close
    @@me.close
  end
end

我不确定你到底想做什么,但我认为你正在寻找的魔法很简单:

class LoginUI < UI::WebDialog
  # initialize() and intiLoginDlg
end
…应按预期工作


另一个使用封装而不是子分类的更高级(可能是过度设计的!)解决方案是尝试。

更进一步,从Ruby的
initialize
方法返回任何东西都没有任何用处。调用
.new
时不会返回返回值-您将始终获得该类的实例。
$loginUI=LoginUI.new
$loginUI.show