【发布时间】:2011-11-28 19:09:43
【问题描述】:
对于 Ruby,是否有类似 Python __getattr__ 的东西?在 Python 中,当引用未定义的属性(方法或属性)时,会调用 obj.__getattr__。我在 Ruby 中找到了method_missing,但它不适用于属性。
我的用例是: 我正在测试 Mirah 作为 JRuby -> Java 编译器。在标准 JRuby 中,Swing 方法和属性是“Rubyfied”(例如:label.setText "x" => label.text = "x"),但在 Mirah 中不是,因为 Mirah 没有像 JRuby 这样的专有运行时库.然后,我想在运行时获取属性引用并将每个调用映射到相应的 Swing 方法(label.text => label.getText() / label.text = "x" => label.setText("x") ) .
【问题讨论】:
-
@jsalonen:没有重复,
getattr__getattr__。 Python getattr 类似于 Ruby 的“方法”:obj.getattr("value") 等价于 obj.value。__getattr__是一个“魔术”方法,在引用未定义的属性时调用