Ruby 构造函数和异常

标签 ruby exception constructor

Ruby 新手,我想弄清楚使用什么习惯用法来将某些整数值限制为类的构造函数。

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

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

最佳答案

嗯,你是完全正确的,即使 initialize 引发异常,对象仍然存在。然而,任何人都很难坚持引用,除非你从 initialize 中泄漏 self 就像我刚写的下面的代码一样:

>> 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!

关于Ruby 构造函数和异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1485114/

相关文章:

ruby-on-rails - 如何为 Puma 检查 Rails 应用程序的线程安全

exception - 如何在 Haskell 中正确使用 Control.Exception.catch?

java - 未捕获的翻译错误 : com. android.dx.cf.code.SimException

c++ - 在C++中,如何正确获取指向 vector 的共享指针,最大限度地减少复制构造函数的调用次数?

java - 在 java 中将值传递给返回类型为 void 的构造函数时出现错误?

Ruby,检查字符串是否都是有效的十六进制字符?

ruby - 使用 Guard 忽略目录

c# - C#XNA多线程SpriteBatch.End() “Object reference not set to an instance of an object”

c++ - 构造函数链接和初始化语法

ruby-on-rails - 如何在文本字段rails postgresql中查询json数据