使用括号在Ruby中包含一个块?
我不小心发现了|| =()的
Ruby习语,
如: def app_logger @app_logger ||= ( logfile = File.open(::Rails.root.join(LOG_FILE),'a') logfile.sync = true AppLogger.new(logfile) ) end 我尝试使用{}而不是(),但它没有用.我以为{}是用来封闭一个块. 这是一个已知的成语吗?这是一种好风格吗? 我没有找到关于这种括号使用的文档.任何指针都会有所帮助. 请注意这篇文章是关于使用()这种方式,而不是使用|| =.关于后一种习语已经有很多帖子了. 解决方法
就像Ruby中可以完成的很多事情一样,其中许多事情都不应该完成,这就是其中之一.
当已经存在其他设施时使用括号对代码进行分组可能会造成混淆,并且几乎肯定与许多编码样式指南相反.如果我在管理的代码中看到这个,我会立即修复它. 最好的方法是使用开始/结束标记使其完全清楚发生了什么: def app_logger @app_logger ||= begin logfile = File.open(::Rails.root.join(LOG_FILE),'a') logfile.sync = true AppLogger.new(logfile) end end Ruby中的很多东西都评估为单个值,而(……)的内容显然是其中之一. 另一个foo || =(a = 10; a 10)“更好”的例子也颇具争议.这会进行两次分配和添加,但只是有条件的.这个几乎总是用long / end以长格式编写,以明确表示10是结果. 从风格的角度来看,隐藏其中的“重要”部分,a 10,在一行的末尾是坏的,它可以被忽略.将它作为最后一行使其非常清楚.这也是为什么在长行末尾添加if语句也很糟糕的原因,它隐藏了该行只是有条件执行的原因. 对于简洁性的关注总是被可读性的担忧所压倒.在磁盘上保存几个字节不会对你有所帮助,因为有人误读了你的代码,他们引入了一个严重的错误. 当你陷入自己的聪明之中时,有人可能成为你的未来.在某些时候发生在我们所有人身上. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |