在我看来,Ruby具有很多语法灵活性,许多东西可能以多种方式编写.
是否有任何语言特性/语法糖/编码约定,为了清晰起见,您作为Ruby程序员避免使用?我问的是你选择不使用的东西,而不是你还需要学习的东西.
如果您的回答是"我使用了所有内容!",您是否曾经评论过如果读者知道相关Ruby语法则会显而易见的代码?
[我对RoR环境中的Ruby特别感兴趣,但欢迎一切.]
for ... in ...循环.它直接编译为obj.each(并相应地抛出一个奇怪的错误消息)并且完全没必要.我甚至没有看到它提高可读性的地方 - 如果你已经在红宝石周围待了一个多星期,#each应该很自然.
首先:如果这是一个简短的一次性脚本,或者在命令行上使用一行,或者在irb.但我的大部分时间都花在中型或大型脚本或应用程序上.所以:
避免:
class << self代码块来实现类方法.这是一个可爱的伎俩,但并不比它更好def self.foo,也不那么可读(特别是在第一页之后).for i in collection:collection.each改用.proc {...}:通常lambda {...}更好.@@foo).它们是有问题的,通常可以毫不费力地用类级实例变量替换.ruby -w.如果您正在编写一个供他人使用的宝石,这一点尤为重要.else'在begin ... rescue ... end'街区'.个人偏好:这是一个边缘案例太多,很少有人知道它存在或如何工作值得.ObjectSpace和GC.你可能不需要去那里.你绝对不想去那里.=begin和=end多行评论.个人喜欢逐行评论.这些只会让我感到恶心.使用它,但谨慎或作为最后的手段(并适当评论):
evalclass_eval传入字符串时(或等).有一些元编程技巧,你不能没有传递一个字符串.偶尔,字符串版本表现得更好(有时候很重要).否则,我更喜欢为我的元编程发送实际ruby代码块.对于许多元编程任务,可以完全避免eval.$0,$:,$$和其他环境变量,但即使如此,你可以限制你的使用).
require "English".__END__对于数据块.非常适合小型单文件脚本.对多文件应用程序无益.不要使用它,但也不要真的避免它:
我经常使用的东西,其他人可能不关心的东西,或者我经常看不到的东西:
and"和" or"关键词:他们有不同的优先级&&和||,所以你必须要小心他们.我发现它们的不同优先级非常有用.