Questions tagged «continuations»


3
延续和回调之间有什么区别?
我一直在浏览整个网络,以寻找关于连续性的启示,而且令人困惑的是,最简单的解释如何如此彻底地混淆了像我这样的JavaScript程序员。当大多数文章解释Scheme中代码的延续或使用monad时尤其如此。 现在,我终于认为我已经理解了延续的本质,我想知道我确实知道的是事实。如果我认为正确的东西实际上不是真实的,那就是无知而不是启蒙。 所以,这就是我所知道的: 在几乎所有语言中,函数都会将值(和控件)显式返回给其调用方。例如: var sum = add(2, 3); console.log(sum); function add(x, y) { return x + y; } 运行代码段隐藏结果展开摘要 现在,使用具有一流功能的语言,我们可以将控件和返回值传递给回调,而不是显式返回给调用方: add(2, 3, function (sum) { console.log(sum); }); function add(x, y, cont) { cont(x + y); } 运行代码段隐藏结果展开摘要 因此,我们从另一个函数继续,而不是从一个函数返回值。因此,此功能称为第一个功能的延续。 那么,延续和回调之间有什么区别?

7
什么是Scala延续,为什么要使用它们?
我刚刚完成了Scala编程,并且一直在研究Scala 2.7和2.8之间的变化。似乎最重要的一个是continuations插件,但我不了解它的作用或作用。我已经看到了异步I / O的好处,但是我还无法找出原因。在这个问题上一些比较流行的资源是: 定界的延续和Scala 在Scala中转到 品尝2.8:延续 定界的连续性说明(在Scala中) 还有关于堆栈溢出的问题: Scala 2.8和Scala 2.7之间的最大区别是什么? 不幸的是,这些参考文献都没有尝试定义连续的含义或移位/重置功能应该做什么,并且我还没有找到任何能做的参考文献。我一直无法猜测链接文章中的任何示例如何工作(或它们如何工作),因此帮助我的一种方法可能是逐行浏览这些示例之一。即使是第三篇文章中的简单内容: reset { ... shift { k: (Int=>Int) => // The continuation k will be the '_ + 1' below. k(7) } + 1 } // Result: 8 为什么结果是8?那可能会帮助我入门。

2
Async await关键字是否等同于ContinueWith lambda?
有人可以请我确认我是否正确理解Async await关键字吗?(使用CTP版本3) 到目前为止,我已经知道,在方法调用之前插入await关键字实际上可以完成两件事:A。它创建立即返回,B。它创建一个“ continuation”,在异步方法调用完成时调用。无论如何,延续是该方法的代码块的其余部分。 所以我想知道的是,这两个代码在技术上是否等效,如果是,这是否基本上意味着await关键字与创建ContinueWith Lambda相同(即,它基本上是一个编译器的快捷方式)?如果没有,有什么区别? bool Success = await new POP3Connector( "mail.server.com", txtUsername.Text, txtPassword.Text).Connect(); // At this point the method will return and following code will // only be invoked when the operation is complete(?) MessageBox.Show(Success ? "Logged In" : "Wrong password"); VS (new POP3Connector( "mail.server.com", txtUsername.Text, txtPassword.Text ).Connect()) …

5
Haskell Cont monad如何以及为何起作用?
这是Cont monad的定义方式: newtype Cont r a = Cont { runCont :: (a -> r) -> r } instance Monad (Cont r) where return a = Cont ($ a) m >>= k = Cont $ \c -> runCont m $ \a -> runCont (k a) c 您能解释一下它如何运作以及为什么起作用吗?到底在做什么

3
为什么要继续执行Task.WhenAll的延续?
Task.WhenAll在.NET Core 3.0上运行时,我只是对该方法感到好奇。我将一个简单Task.Delay任务作为单个参数传递给Task.WhenAll,并且希望包装后的任务的行为与原始任务相同。但这种情况并非如此。原始任务的延续是异步执行的(这是理想的),多个Task.WhenAll(task)包装的延续是一个接一个地同步执行的(这是不希望的)。 这是此行为的演示。四个辅助任务正在等待同一Task.Delay任务完成,然后继续进行大量的计算(由模拟Thread.Sleep)。 var task = Task.Delay(500); var workers = Enumerable.Range(1, 4).Select(async x => { Console.WriteLine($"{DateTime.Now:HH:mm:ss.fff}" + $" [{Thread.CurrentThread.ManagedThreadId}] Worker{x} before await"); await task; //await Task.WhenAll(task); Console.WriteLine($"{DateTime.Now:HH:mm:ss.fff}" + $" [{Thread.CurrentThread.ManagedThreadId}] Worker{x} after await"); Thread.Sleep(1000); // Simulate some heavy CPU-bound computation }).ToArray(); Task.WaitAll(workers); 这是输出。四个延续在不同线程(并行)中按预期运行。 05:23:25.511 [1] Worker1 before await 05:23:25.542 …

1
如何将连续单声道分解为左右伴随?
由于State monad可分解为乘积(左-函子)和阅读器(右-可表示)。 有没有一种方法可以使Continuation Monad分解?下面的代码是我的尝试,它不会类型检查 -- To form a -> (a -> k) -> k {-# LANGUAGE MultiParamTypeClasses, TypeOperators, InstanceSigs, TypeSynonymInstances #-} type (<-:) o i = i -> o -- I Dont think we can have Functor & Representable for this type synonym class Isomorphism a b where from :: …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.