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 – 如何创建自定义块所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)