假设你有大量的对象 —— 一个对象图 ——它们是一些操作或者 API 调用的结果,你如何来分析数据并将分析结果作为对象图的元数据?本文提供了一个简单的,可扩展的解决方案,采用 Ruby 单实例类。文章以静态分析器代码和死代码移除器为例子介绍了如何应用这个方案来解决问题。
这篇文章中的例子着重于语言方面的工具 —— 但是文章的思想是适用于所有的对象集合的。在任何对象图需要被注解的地方,也许是在独立开发的解析器的多个处理步骤中,将注解与节点一起保存是很方便的。如果对象图的类不是在开发者的控制之下而且在其他地方被广泛使用(例如,在 ParseTree 中的数组类),单实例类是个好的选择。对于其他情况,打开类也许是一个更好的方案。更多精彩内容,请阅读全文。
阅读全文: 使用单实例类来处理对象元信息
更多内容推荐
使用单实例类来处理对象元信息
假设你有大量由API提供的对象 —— 我们称之为一个对象图。现在你希望处理这些对象 —— 需要一些中间数据,例如:处理过程产生了一些需要被存储在对象中的元数据。问题是:在哪里存储元数据?我们将介绍如何使用Ruby单实例类来处理这个问题。
用元编程的方式向 Ruby 添加 properties
Werner Schuster用一个简单的事例,带我们认识了如何使用元编程的方式为Ruby类增加类似Java的properties支持。介绍了一些应用契约设计和可插拔类型系统的提高性能的原则。
说点题外话 02|模式并不是解决方案
是否能从解决方案反推它要解决的问题,以判断使用了什么模式呢?
2021-07-22
Java Agent 与字节码注入
我们可以通过Java agent的类加载拦截功能,修改某个类所对应的byte数组,并利用这个修改过后的byte数组完成接下来的类加载。
2018-10-05
Ruby 进展近况:Ruby 1.9.0-5 发布、JRuby 跳过 1.8.7、用于 Case 测试的 Procs#===
作为Ruby 1.9.1特性冻结的前驱,Ruby 1.9.0-5已经发布。1.9.x中的Procs目前实现了Proc#===,可以在case语句中作为执行选择器来使用。另外:JRuby团队决定在不久的将来放弃对1.8.7的支持。
Rubinius 内部细节:线程、对象空间和调试
我们继续进行对Rubinius创始人Evan Phoenix的采访,并且讨论Rubinius的内部细节,包含虚拟机内部如何使用字节码实现快速调试,以及ObjectSpace和线程方面实现的问题。
第三章内容介绍
2018-12-10
架构师训练营第三周作业
单例模式:一个类有且仅有一个对象。
2020-11-08
阅读者:Ruby 的白魔法书
在Ruby的世界中,程序员们享受着各种光怪陆离的语法糖,也经历着各种各样的陷阱。而这一切的根本就在于Ruby强大的元编程能力。元编程就像Ruby世界的魔法,当其是白魔法的时候可以帮助你把程序变得异常简洁,美观;而当其是黑魔法的时候,你将会迷失在一些很难解释的Bug中。
设计模式模块热点问题答疑
本文对前面的9种设计模式做个分类和总结,同时也对前面各章的课后思考题做个答疑。
2019-05-23
147|服务号:网页授权的两种方式
2020-12-21
使用 Async 和 Await 的代价
异步技术能使得应用程序的总吞吐量得到显著提升,但这并不是无偿的。异步函数往往比其同步替代方案稍慢一些。Stephen Toub最近在MSDN杂志中一篇题为“异步性能:了解Async和Await的代价”的文章中讨论了该主题。
OOP 在 2021 年还是回事儿吗?
2021年,像 OOP(面向对象的程序设计)这样上世纪 60 年代的范式严重过时了吗?
使用 ParseTree 进行 LINQ 风格查询和提取元数据
无论是LISP宏还是LINQ的表达式树,使用了AST的代码就是个强大的工具。让我们来看看在Ruby中ParseTree如何提供了对AST的支持,还有在Ambition库、Sequel库以及Web框架Merb中是如何来使用它的。
架构师训练营第三周作业 1
作业1.手写一个单例模式的实现例子。
2020-11-08
数据框的基本属性和方法
2022-12-29
评论