gpt4 book ai didi

ruby - Python 类似 __getattr__ 用于 Ruby/JRuby

转载 作者:数据小太阳 更新时间:2023-10-29 07:32:49 25 4
gpt4 key购买 nike

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") ) .

最佳答案

我不确定这是否涵盖您的用例,但一般来说,method_missing 应该可以解决问题。您如何期望 Ruby 类知道未定义的方法和未定义的“属性”之间的区别?它只知道传递给它的是一个它不认识的名称。它应该是一种方法还是一种属性?谁知道?除非你在谈论 setter 属性,在这种情况下,名称后附加一个 =:

 class X
def method_missing name,*args
puts "missing '#{name}' called with #{args}"
end
end

.

> x = X.new
=> #<X:0xe6b322>
> x.unknown_method
missing 'unknown_method' called with []
=> nil
> x.unknown_property
missing 'unknown_property' called with []
=> nil
> x.unknown_property= 42
missing 'unknown_property=' called with [42]
=> 42

关于ruby - Python 类似 __getattr__ 用于 Ruby/JRuby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8300956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com