加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

对于Ruby / JRuby,Python就像__getattr__

发布时间:2020-12-17 02:30:37 所属栏目:百科 来源:网络整理
导读:对于 Ruby,有没有像 Python __getattr__这样的东西?在Python中,当引用未定义的属性(方法或属性)时,会调用obj .__ getattr__.我在Ruby中找到了method_missing但它不适用于属性. 我的用例是: 我正在测试Mirah作为JRuby – Java编译器.在标准的JRuby中,Swing
对于 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读