加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用括号在Ruby中包含一个块?

发布时间:2020-12-17 03:39:58 所属栏目:百科 来源:网络整理
导读:我不小心发现了|| =()的 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 ||= (
    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语句也很糟糕的原因,它隐藏了该行只是有条件执行的原因.

对于简洁性的关注总是被可读性的担忧所压倒.在磁盘上保存几个字节不会对你有所帮助,因为有人误读了你的代码,他们引入了一个严重的错误.

当你陷入自己的聪明之中时,有人可能成为你的未来.在某些时候发生在我们所有人身上.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读