ruby中的class_eval

最近几天在做一个ruby作业的时候遇到了一些问题,题目是这样要求的

  

 
要求自己写一个访问器属性,可以记录下来该属性所描述的类中数据成员的所有历史值(原谅我对ruby从没有系统学习过,所以只有用自己在c++或者c#中知道的术语来描述)。
 
由于是在编译阶段就自动生成相应方法,所以这里就用了class_eval 函数。
 
尽管对语言不熟悉,但是我还是在一开始初步形成思路,也就是在class_eval 中添加一个方法模板,使得每个有该属性attr_accessor_with_history (或者说关键字?)的属性的类都自动的生成一个相关的setter,在setter中进行对历史值列表的维护。
 
想起来固然简单,但是由于对ruby的符号和元编程都毫无了解,实际开始操作的时候就发现了其中有很多没办法忽视的问题。
 
第一,我应该如何在class_eval 的字符串参数中访问到只知道变量名字字符串的变量?
经过一番学习之后,了解到了在编译阶段,会自动的将#{str}替换成str对应的变量,知道了这些,就方便了很多。
至少了解到该如何define这个setter的模板。

  

 
第二,在这个参数内部如何访问类的成员又成了一个问题,尤其是访问成员的历史值数组。
经过多次尝试,以及对手册又多次理解,发现这个问题其实跟上一个是相同的,由于#{str}只是一种格式,其中的str是任何返回值为字符串的表达式都可以自动替换成相应变量。
所以就简单的写了一个if就搞定了。

  

posted on   fingerpass  阅读(807)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
< 2012年3月 >
26 27 28 29 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
1 2 3 4 5 6 7

统计

点击右上角即可分享
微信分享提示