我和一些程序员朋友讨论过,他们说他们看到Ruby程序员(特别是)生成了很多"太聪明"的代码.所以我想知道那会是什么样的?我指的是在一个简单易用的东西中不必要地使用一个模糊的语言特征.知道任何好的Ruby例子吗?
在直截了当地回答你的问题之后,我还想对这个前提提出异议; 每当一组程序员以这种方式描述另一种语言的用户时,他们可能会告诉你更多关于他们自己而不是他们所描述的社区的可能性.
例如,你可能会指责程序员过于沉迷于低级别的细节,或者因为他们对功能纯度的渴望而蒙羞的程序员; perl mongers为了简洁,等等.但是,当你这样做的时候,你会贬低因果关系.
当我想编写一个以某种风格表达最佳的程序时,我会尝试选择支持该风格的语言.有时候你需要一个可以让你做一些不寻常的事情的工具,而且这样一个像ruby这样的语言的任务和数学的mathematica或者工具包中的浏览器操作的javascript一样有价值.如果我想玩排版,我会跳到postscript,因为这是它最擅长的.
这就像是说"你有没有注意到使用电钻的人总是在挖洞?" 这是真的,但有点遗漏了这一点.
class Tree def initialize*d;@d,=d;end def to_s;@l||@r?"<#{@d},<#{@l}>,<#{@r}>>":@d;end def total;(@d.is_a?(Numeric)?@d:0)+(@l?@l.total: 0)+(@r?@r.total: 0);end def insert d alias g instance_variable_get p=lambda{|s,o|d.to_s.send(o,@d.to_s)&& (g(s).nil??instance_variable_set(s,Tree.new(d)):g(s).insert(d))} @d?p[:@l,:<]||p[:@r,:>]:@d=d end end
双重爆炸:!!东西
我不会写它的作用.忘记你曾经看过这种语法.
任何元编程的使用都没有想到是否有更好的方法来使用该语言的正常,非'''成语来实现这一点,我往往觉得很烦人.
对"DRY"的痴迷(不要重复自己),其中一些恶魔般的元编程意大利面被调用,以避免重复自己,比如说,两次以一种简单而实际上更直接和可读的替代方式.
特别是使用'eval'.随着元编程的发展,在尝试其他一切之后,这个应该是你绝对的最后手段.例如,许多rubyists似乎没有听说过Class#define_method.
yaml.rb的输出阶段; 这就是我与zaml.rb共同撰写的原因.标准的yaml版本可以进行各种各样的元编程(它最初是为什么 - 幸运僵硬,我一般都很钦佩)但是用一个直接映射到类树的直接分层版本替换它我们能够消除几个O(n ^ 3)个案例,导致感兴趣的案例加速十倍,修复了几个错误,并在一小部分代码中完成.
此外,即使不是红宝石大师的人也可以看到它的作用.
本文中的许多示例似乎都符合条件:
你应该在自己的代码中使用21个Ruby技巧.
这篇文章的标题有点赠品,因为它的内容是"应该"而不是"不应该".代码"应该"是透明的.代码"不应该"是棘手的.