何时使用块

2024-03-24

我喜欢红宝石块!它们背后的想法非常非常简洁和方便。

我刚刚回顾了过去一周左右的代码,基本上是我写过的每一个 ruby​​ 函数,而且我注意到它们中没有一个返回值!我总是使用块来传回数据,而不是返回值!

我什至发现自己正在考虑编写一个小状态类,这将允许我编写如下代码:

something.do_stuff do |status|
  status.success do 
    # successful code
  end

  status.fail do
    # fail code
    puts status.error_message
  end
end

我是否使用了过多的块?是否有时使用块,有时使用返回值?

有什么需要注意的问题吗?我对方块的大量使用是否会在某个时候来咬我?


整个事情将更具可读性:

if something.do_stuff
  #successful code
else
  #unsuccessful code
end

或者使用共轨惯用法:

if @user.save
  render :action=>:show
else
   @user.errors.each{|attr,msg| logger.info "#{attr} - #{msg}" }
   render :action=>:edit
end

恕我直言,避免返回布尔值是过度使用代码块。

如果 ,则块有意义。 。 。

它允许代码使用资源而无需关闭该资源

 open("fname") do |f|
  # do stuff with the file
 end #don't have to worry about closing the file

调用代码必须对结果进行重要的计算

在这种情况下,您可以避免将返回值添加到调用范围。这对于多个返回值通常也是有意义的。

something.do_stuff do |res1, res2|
   if res1.foo? and res2.bar?
      foo(res1)
   elsif res2.bar?
      bar(res2)
   end
 end #didn't add res1/res2 to the calling scope

代码必须在yield之前和之后调用

您可以在一些 Rails 助手中看到这一点:

 <% content_tag :div do  %>
     <%= content_tag :span "span content" %>
  <% end -%>

而且当然迭代器是一个很好的用例,因为它们(被红宝石主义者认为)比for循环或列表推导式 http://en.wikipedia.org/wiki/List_comprehension.

当然不是一个详尽的列表,但我建议您不要只使用块,因为您可以。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

何时使用块 的相关文章

随机推荐

  • 如何使用 UTC 时区偏移格式化 DateTime?

    这是什么类型的日期格式 2020 03 26T00 57 08 000 08 00 我在用着日期格式 https api flutter dev flutter intl DateFormat class html class DateTi
  • 生成 javadoc 作为 word 文档

    我们怎样才能将javadoc生成为word文档而不是传统的html页面呢 查看 doclet http doclet com http doclet com其中有大量自定义 javadoc 渲染的示例 即 PDF 等 并且还研究了 Apac
  • (ResourceGroupNotFound) 资源组“????”创建天蓝色媒体服务帐户时找不到

    我正在尝试使用此处的说明创建服务主体帐户 https learn microsoft com en us azure media services latest stream files tutorial with api examine
  • 脚本和样式元素的 HTML“nonce”属性的用途是什么?

    W3C 表示 HTML5 1 中有一个新属性 称为nonce for style and script可供网站的内容安全策略使用 我用谷歌搜索了一下 但最终没有明白这个属性实际上是做什么的 以及使用它时会发生什么变化 The nonce属性
  • 暂停和恢复 jmeter 执行

    我正在寻找暂停和恢复 JMeter 执行 单 多线程 的选项 1 Pausing and Resuming through command line 2 From the Jmeter UI 3 By coding in some lang
  • 如何创建 nggrid 自定义页脚

    我想为 ng grid 启用页脚 但我想完全自定义它并覆盖 ng grid 默认情况下的功能 基本上 我只想要网格底部的 加载更多 链接 该链接将根据 pagingOptions pageSize 设置的内容从服务器加载更多行 并将其附加到
  • 从 umbrello 中的 java 代码自动创建类图?

    我能够将 java 代码导入到 umbrello 中 但是 如何自动生成类图呢 也许雨伞可以not有那个功能 来自handbook http docs kde org stable en kdesdk umbrello code impor
  • Clojure中,函数、引用函数和尖引号函数之间的区别

    在 clojure 中 我想知道以下三者之间有什么区别 println map 1 2 3 4 5 6 println map 1 2 3 4 5 6 println map 1 2 3 4 5 6 结果是 5 7 9 4 5 6 5 7
  • 如何将 Express 响应对象传递给前端 JS 对象

    我的控制器正在通过 res render 将纬度 经度数据发送到我的车把视图 res render coords viewModel viewModel 包含一个对象数组 每个对象都包含位置名称 纬度和经度 我想获取这些信息并在我的视图中的
  • Google Play 控制台显示 Release not live

    通常 当应用程序在内部渠道中发布时 构建会立即得到反映 一分钟之内 但奇怪的是 即使一天后 构建也没有反映出来 我正在使用最新的 Google 控制台 其状态显示为 发布未上线 而不是 正在审核 您能帮助了解可能导致此情况的行为或情况吗 当
  • 在 Phonegap Build App (iOS/Android) 中打开外部链接

    我在用着音隙构建要部署 mi Apps 我正在使用科尔多瓦3 3 0版本 我想在本机浏览器中打开外部链接 安卓 iOS 我正在尝试使用InAppBrowser 插件科尔多瓦 但这对我不起作用 打开链接 但在应用程序内没有后退按钮 我见过这样
  • LDAP C++ API 选择 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在 Linux 下编写自己的 LDAP 客户端 特定于我们的本地环境 我很可能会使用 QT4 来提
  • 如何获取 MongoDB 集合中的最后一项?

    我有时使用 MongoDB 来执行各种快速插入或作为日志 但我在获取非常简单的查询 在 Mongo 中 我该如何获得类似于此 T SQL 的结果 SELECT TOP 1 date FROM Collection ORDER BY date
  • C++ 的 NumPy 风格数组? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何 C 或 C 库具有类似 NumPy 的数组 支持切片 向量化操作 逐个元素添加和减去内容等
  • 为什么最好的做法是用括号将分配给变量的 JSX 括起来?

    在下面的示例中 x 和 y 的输出相同 我见过两种方式编写的 React 代码 有区别吗 由于我看到的许多 React 代码示例都使用括号语法 我认为这是有原因的 如果这是最佳实践 那么为什么用括号将分配给变量的 JSX 括起来是最佳实践
  • 如何存储大量数据?

    我必须 在状态机上 制作 RSA 签名C在 32 位板上 我的内存有限 所以我无法将小数存储在向量或类似的东西中 最好的事情是如果我可以存储位并且可以轻松访问它们 什么存储方法最好 我做了这个 if CPU TYPE CPU TYPE 32
  • 通过 PHP 的 JS 解包器 - 函数(p,a,c,k,e,r)

    我在互联网上搜索但到目前为止没有找到解决方案 我必须抓取用以下内容压缩的页面 具有视频流 的内容Dean Edwards 封隔器工具 http dean edwards name packer 实时 因此 我只需要通过 PHP 来解码压缩的
  • 通过 Java 执行 ADS 相关的 Powershell 命令不起作用,使用 2 种不同的方式时会出现 2 种不同的错误

    我一直在尝试通过 java 在 powershell 会话中执行一组命令 但还没有成功 我的目标是在 AD 中搜索域为 domain com 的计算机对象 我从一个命令开始 不幸的是 以下命令在我的 powershell 提示符下成功运行
  • 图像不显示在 jar 中但显示在编译器中?

    我知道 我知道 这个问题以前有人问过 但我看过的每个资源都使用 IconImages 而我只有普通图像 有不同的解决方案吗 请帮助 因为我已经坚持研究并试图解决这个问题好几天了 但没有任何进展 Image Floor Toolkit get
  • 何时使用块

    我喜欢红宝石块 它们背后的想法非常非常简洁和方便 我刚刚回顾了过去一周左右的代码 基本上是我写过的每一个 ruby 函数 而且我注意到它们中没有一个返回值 我总是使用块来传回数据 而不是返回值 我什至发现自己正在考虑编写一个小状态类 这将允