ruby – 如何创建自定义块

ruby – 如何创建自定义块,第1张

概述我知道在 ruby中我们可以使用while循环,但我想知道我是否可以创建一个自定义循环,所以我可以做这样的事情: custom_while i < 5 do puts i i += 1end 我目前有这个代码: def custom_while(condition) loop do break if not condition yield 我知道在 ruby中我们可以使用while循环,但我想知道我是否可以创建一个自定义循环,所以我可以做这样的事情:

custom_while i < 5 do    puts i    i += 1end

我目前有这个代码:

def custom_while(condition)    loop do        break if not condition        yIEld    endendi = 0custom_while i < 5 do    puts i    i += 1end

然而,当评估条件时,它总是变为真(因为它认为i <5的第一次评估仅为真. 任何帮助将不胜感激! 注意:这仅用于教育目的.

解决方法 你几乎拥有它.那么,你的问题是条件只评估一次?那么,我们知道我们可以根据需要经常评估哪种结构?那是对的:功能!所以,让我们使条件成为一个函数(或Ruby语言中的Proc):

def custom_while(condition)  loop do    break unless condition.()    yIEld  endendi = 0custom_while -> { i < 5 } do  puts i  i += 1end# 0# 1# 2# 3# 4

遗憾的是,这并不像其他语言那样漂亮. Ruby的语法和语义针对以1“函数”作为参数的方法进行了积极优化. Ruby有一个特殊的语法和语义轻量级构造,即块.但是,只要你有一个以上,你就不幸了.

将其与具有适当块文字的语言(例如Smalltalk)进行比较.在Smalltalk中,你可以在:do:中编写一个方法,并像这样调用它:

i := 0.while: [i < 5] do: [Transcript write: i. i := i + 1].

实际上,在Smalltalk中,块的语法非常轻巧,因此语言中根本没有控制结构. if / then / else只是布尔值的实例方法,例如:

i % 2 == 0 ifTrue: [Transcript write: "even"] ifFalse: [Transcript write: "odd"].

虽然实际上是Block的实例方法,但实际上,您的示例将如下所示:

i := 0.[i < 5] whileTrue: [Transcript write: i. i := i + 1]

注意:我不保证Smalltalk代码,我没有测试它.

总结

以上是内存溢出为你收集整理的ruby – 如何创建自定义块全部内容,希望文章能够帮你解决ruby – 如何创建自定义块所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1292443.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存