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