Ruby中的静态块

时间:2009-12-07 12:44:32

标签: ruby constructor

我有一段时间以来一直是Java程序员,我试图转换为ruby一段时间。我只是想在ruby中开发一个小测试程序,我的意图就像是跟随。

  1. 我想在ruby中创建一个简单的链接列表类型的对象;其中类中的实例变量指向另一个相同类型的实例。
  2. 我想填充并链接所有节点;在构造函数被调用之前只有一次。我们通常在Java静态块中做的事情。

  3. Initialize方法是ruby中的构造函数签名。他们周围有什么规则吗?就像在Java中一样,如果它不是第一行(或者在调用类代码之后?),你就不能从构造函数中调用另一个构造函数。

  4. 感谢您的帮助。 -Priyank

4 个答案:

答案 0 :(得分:19)

答案 1 :(得分:2)

您可以在任何方法声明之外简单地在类体中初始化类变量。它的行为类似于Java中的静态初始化器:

class Klass
   @@foo = "bar"

   def sayFoo
      puts @@foo
   end

   def self.sayFoo
      puts @@foo
   end

 end

类字段@@foo在此初始化为"bar"

答案 2 :(得分:0)

在ruby对象创建中就像这样

class Class
  def new(*args)
    obj= self.allocate # get some memory
    obj.send(:initialize) # call the private method initialize
  end
end
  • Object#initialize只是一种普通的私人方式。
  • 如果你想在Object#initialize之前发生一些事情,你必须自己写Class#new。但我认为你没有理由这样做。

答案 3 :(得分:0)

这与范式在09年给出的回答基本相同。

这里我想说明“静态初始化程序”可以调用其他代码。我正在模拟在类初始化时加载特殊用户一次的场景。

class Foo
  def user
    "Thomas"
  end
end

class Bar
  @@my_user = Foo.new.user

  def my_statically_defined_user
    @@my_user
  end
end

b = Bar.new
puts b.my_statically_defined_user   # ==> Thomas