当前位置:  开发笔记 > 编程语言 > 正文

什么是Ruby代码的"太聪明"的例子?

如何解决《什么是Ruby代码的"太聪明"的例子?》经验,为你挑选了6个好方法。

我和一些程序员朋友讨论过,他们说他们看到Ruby程序员(特别是)生成了很多"太聪明"的代码.所以我想知道那会是什么样的?我指的是在一个简单易用的东西中不必要地使用一个模糊的语言特征.知道任何好的Ruby例子吗?



1> MarkusQ..:

在直截了当地回答你的问题之后,我还想对这个前提提出异议; 每当一组程序员以这种方式描述另一种语言的用户时,他们可能会告诉你更多关于他们自己而不是他们所描述的社区的可能性.

例如,你可能会指责程序员过于沉迷于低级别的细节,或者因为他们对功能纯度的渴望而蒙羞的程序员; perl mongers为了简洁,等等.但是,当你这样做的时候,你会贬低因果关系.

当我想编写一个以某种风格表达最佳的程序时,我会尝试选择支持该风格的语言.有时候你需要一个可以让你做一些不寻常的事情的工具,而且这样一个像ruby这样的语言的任务和数学的mathematica或者工具包中的浏览器操作的javascript一样有价值.如果我想玩排版,我会跳到postscript,因为这是它最擅长的.

这就像是说"你有没有注意到使用电钻的人总是在挖洞?" 这是真的,但有点遗漏了这一点.



2> 小智..:
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


对于ruby来说显然太聪明了:$ ruby​​ test.rb test.rb:9:语法错误,意外']',期待tSTRING_CONTENT或tSTRING_DBEG或tSTRING_DVAR或tSTRING_END @d?p [:@ l,:]:@ d = d ^(该死的,SO会重新包裹我的线条不是吗?哦,好吧......非常合适.)

3> Commander Ke..:

双重爆炸:!!东西

我不会写它的作用.忘记你曾经看过这种语法.


troelskn:Ruby将nil和false视为false - 其他一切都是真的.我不认为你需要双重爆炸,IMO甚至三元运算符(声明:true?false)更具可读性.
指挥官Keen,你错了,Ruby并不总是将nil和false视为false(例如:false.nil?=> false,nil.nil?=> true或nil == false => false)所以你需要三元组操作员或双重爆炸.使用三元运算符,你让我思考,因为我必须检查你是否已经交换了错误和真实(你可能已经完成了声明:false?true)而当我看到!!事情我确切地知道会发生什么,每一个单次.你可以自己对爆炸做同样的情况(如果!!事情=>事情:......为什么不做!事情=>事情:......)?

4> Matt..:

任何元编程的使用都没有想到是否有更好的方法来使用该语言的正常,非'''成语来实现这一点,我往往觉得很烦人.

对"DRY"的痴迷(不要重复自己),其中一些恶魔般的元编程意大利面被调用,以避免重复自己,比如说,两次以一种简单而实际上更直接和可读的替代方式.

特别是使用'eval'.随着元编程的发展,在尝试其他一切之后,这个应该是你绝对的最后手段.例如,许多rubyists似乎没有听说过Class#define_method.



5> MarkusQ..:

yaml.rb的输出阶段; 这就是我与zaml.rb共同撰写的原因.标准的yaml版本可以进行各种各样的元编程(它最初是为什么 - 幸运僵硬,我一般都很钦佩)但是用一个直接映射到类树的直接分层版本替换它我们能够消除几个O(n ^ 3)个案例,导致感兴趣的案例加速十倍,修复了几个错误,并在一小部分代码中完成.

此外,即使不是红宝石大师的人也可以看到它的作用.



6> Richard..:

本文中的许多示例似乎都符合条件:

你应该在自己的代码中使用21个Ruby技巧.

这篇文章的标题有点赠品,因为它的内容是"应该"而不是"不应该".代码"应该"是透明的.代码"不应该"是棘手的.

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有