我有一段时间以来一直是Java程序员,我试图转换为ruby一段时间。我只是想在ruby中开发一个小测试程序,我的意图就像是跟随。
我想填充并链接所有节点;在构造函数被调用之前只有一次。我们通常在Java静态块中做的事情。
Initialize方法是ruby中的构造函数签名。他们周围有什么规则吗?就像在Java中一样,如果它不是第一行(或者在调用类代码之后?),你就不能从构造函数中调用另一个构造函数。
感谢您的帮助。 -Priyank
答案 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