Ruby构造函数和异常

Chr*_*ris 9 ruby constructor exception

Ruby的新手,我试图找出用于将某些整数值限制为类的构造函数的习惯用法.

从我到目前为止所做的,如果我引发异常initialize(),对象仍然被创建但是将处于无效状态(例如,nil实例变量中的某些值).我不太明白我应该如何限制这些值,而不会进入看起来不必要的大步骤,比如限制访问new().

所以我的问题是,通过什么机制可以限制对象实例化的值的范围?

Dig*_*oss 13

嗯,你是完全正确的,即使initialize引起异常,物体仍然存在.然而,这将是相当困难的,除非你泄露任何人挂在参考self出initialize如下面的代码我刚写的作用:

>> class X
>>   def initialize
>>     $me = self
>>     raise
>>   end
>>   def stillHere!
>>     puts "It lives!"
>>   end
>> end
=> nil
>> t = X.new
RuntimeError: 
    from (irb):14:in `initialize'
    from (irb):20:in `new'
    from (irb):20
>> t
=> nil
>> $me
=> #<X:0xb7ab0e70>
>> $me.stillHere!
It lives!
Run Code Online (Sandbox Code Playgroud)