Coffeescript 执行函数直到满足谓词
我试图编写一个函数,Coffeescript 执行函数直到满足谓词,coffeescript,Coffeescript,我试图编写一个函数,doandrepeattill,它调用一个函数f,直到谓词/条件pred为真 在下面的代码中,我希望@sum从0开始,然后打印10,20,…,90,100,然后终止 doAndRepeatUntil = (f, pred) -> console.log @sum f() until pred() @sum = 0 f = -> @sum += 10 pred = -> @sum >= 100 console.log f() #
doandrepeattill
,它调用一个函数f
,直到谓词/条件pred
为真
在下面的代码中,我希望@sum
从0开始,然后打印10,20,…,90,100
,然后终止
doAndRepeatUntil = (f, pred) ->
console.log @sum
f() until pred()
@sum = 0
f = ->
@sum += 10
pred = ->
@sum >= 100
console.log f() # NaN
doAndRepeatUntil(f, pred) # infinite loop
然而,我看到了f()
打印出NaN
。和doandrepeattil(f,pred)
在一个无限循环中旋转。正如他在评论中所暗示的,@sum
在每个函数中都有一个不同的上下文。如果情况允许,我会在函数之前定义sum
,这样它就在所有函数的范围内()
如果确实需要保持@sum
,则需要在函数()上使用一个粗箭头
正如他在评论中暗示的那样,@sum
在每个函数中都有不同的上下文。如果情况允许,我会在函数之前定义sum
,这样它就在所有函数的范围内()
如果确实需要保持@sum
,则需要在函数()上使用一个粗箭头
正如他在评论中暗示的那样,@sum
在每个函数中都有不同的上下文。如果情况允许,我会在函数之前定义sum
,这样它就在所有函数的范围内()
如果确实需要保持@sum
,则需要在函数()上使用一个粗箭头
正如他在评论中暗示的那样,@sum
在每个函数中都有不同的上下文。如果情况允许,我会在函数之前定义sum
,这样它就在所有函数的范围内()
如果确实需要保持@sum
,则需要在函数()上使用一个粗箭头
你确定@
是你认为它在你使用它的任何地方都存在的吗?不,我不清楚你确定@
是你认为它在你使用它的任何地方存在的吗?不,我不清楚你确定@
是你认为它在你使用它的任何地方存在的吗?不,我不清楚你确定
是你认为的吗你到处都在使用它吗?不,我不是很明显你也可以使用f.sum=0
和f.pred=->…
作为一种简单的方法来收集这些部分(请记住,你可以在(Coffee | Java)脚本中为几乎任何你想要的东西附加属性)。或者创建一个快速类,将sum
、f
和pred
收集到一个包中。您还可以使用f.sum=0
和f.pred=->…
作为收集部分的简单方法(请记住,您可以将属性附加到(Coffee | Java)脚本中几乎任何您想要的内容)。或者创建一个快速类,将sum
、f
和pred
收集到一个包中。您还可以使用f.sum=0
和f.pred=->…
作为收集部分的简单方法(请记住,您可以将属性附加到(Coffee | Java)脚本中几乎任何您想要的内容)。或者创建一个快速类,将sum
、f
和pred
收集到一个包中。您还可以使用f.sum=0
和f.pred=->…
作为收集部分的简单方法(请记住,您可以将属性附加到(Coffee | Java)脚本中几乎任何您想要的内容)。或者创建一个快速类,将sum
、f
和pred
收集到一个包中。
sum = 0
doAndRepeatUntil = (f, pred) ->
console.log sum
f() until pred()
f = ->
console.log 'f', sum
sum += 10
pred = ->
console.log 'pred', sum
sum >= 100
doAndRepeatUntil f, pred # infinite loop
@sum = 0
doAndRepeatUntil = (f, pred) =>
console.log @sum
f() until pred()
f = =>
console.log 'f', @sum
@sum += 10
pred = =>
console.log 'pred', @sum
@sum >= 100
doAndRepeatUntil f, pred # infinite loop