Ruby中的“ yield”一词是什么意思?它到底是做什么的?
好…
Yield是一个关键字(意味着它是语言的核心部分),并且在调用块的方法内部使用。
这是您需要了解的内容:
- 调用一个块会在该块内部运行代码(就像调用方法一样)
- Yield可以将任意数量的参数传递给块
- 块的返回值变为 yield
您必须了解一些障碍才能使之有意义。
您可以将块视为没有名称的方法,这些名称可以作为额外的参数传递给其他方法。
这是一个例子:
- def make_salad
- 产生“生菜”
- 产生“胡萝卜”
- 产生“橄榄油”
- 结束
- make_salad { |成分| 将“在沙拉中添加#{成分}!” }
这将调用该块3次,产生以下输出:
- 在沙拉中加入生菜!
- 在沙拉中加入胡萝卜!
- 在沙拉中加入橄榄油!
本质上就是
yield
这样做,就像调用方法一样,而是调用块。我们没有该块的名称,因此此关键字可以解决这个问题。
获取我的终极Ruby秘籍表: 这个方便的7页PDF帮助您快速找到所需的Ruby语法,正在寻找的Ruby方法或您不太记得其名称的内置类。
现在:
让我们研究一下如果您没有通话区会发生什么。
无阻塞产量==错误消息
如果您
yield
不加障碍地拨打电话,则会收到错误消息。范例:
- def write_code
- 让
- 结束
- write_code
- #LocalJumpError:未提供任何块(产量)
该错误非常清晰,“未提供块”表示该方法调用
write_code
未提供块。如何防止此错误?
像这样:
- def write_code
- 产量如果block_given ?
- 结束
该
block_given?
方法检查一个块是否可用,并且只有yield
在确实存在的情况下才允许您这样做。为什么要使用收益率?
使用
yield
启用块。我们使用块来传递代码位,作为方法调用的一部分。
在以下情况下很有用:
- 您想编写一个通用的日志记录功能,该功能记录了一段代码运行所需的时间
- 您需要在方法完成后运行一些代码(例如Javascript中的“回调”)
- 您需要“惰性代码”,即仅在需要时运行并且可由用户自定义的代码(例如,请阅读Hash#fetch方法)
真好!
Yield_Self –有什么区别?
您可能会发现此新
yield_self
方法,并认为它与有关yield
。好吧,不是。
甚至
yield(self)
不同,因为自我是指当前对象。这种方法的好用吗?
每当您想链接方法并对正在调用的对象执行某些操作时,都可以使用它
yield_self
。同时返回结果,而不是原始对象。
范例:
- n_squared =-> (n ){ n ** 2 }
- 2
- 。yield_self (&n_squared )
- 。yield_self (&n_squared )
- #16
在Ruby 2.6中
yield_self
,该then
方法有一个别名。但不要把它与常规的混淆
yield
。好?
收益率
我还应该快速提到一下
yield
Rails和模板引擎的使用。您会发现
yield
内部布局。Rails将其替换为您正在渲染的视图的内容。
不
yield
等于空布局!这样便可以将布局和视图组合在一起。