在 Ceylon 中是否有等同于 Scala 的 monadic-for/yield 语法的语法?
Is there an equivalent to scala's monadic-for/yield syntax in ceylon?
如何在 Ceylon 中实现“monadic for/yield”语法,例如用于蹦床,因为 Ceylon 不执行尾调用优化。 for/yield-syntax 需要引入新的变量名称,而使用 Tree-like 语法是不可能的。
在 Ceylon 中模拟 Scala 的 for/yield 的最佳方法是什么?
一种解决方案是使用(类型化的)地图。这感觉有点像基于像 Python 这样的映射创建一种内部(类型化)脚本语言。
有更好的解决方案吗?
您的问题有点令人困惑,因为:
- Ceylon 和Java 一样,根本不做尾递归优化。不是做"right"或"wrong"的问题;这是编译器根本不做的事情。
- Ceylon 中根本没有内置的
Monad
抽象。可以使用对类型函数的实验性支持编写自己的 Monad
类型,但它不是 Ceylon 语言模块或 SDK 的一部分。
- Ceylon comprehensions(与 Scala 的
for
/yield
非常相似)被定义为跨越流,而不是 monad。
所以我想您问题的直接答案是 "no"。没有等价物。
为了对您的问题给出更有帮助的答案,我必须知道您在这里实际想要实现的目标。真的很难想象在使用 Ceylon 的内置流、序列、集合或元组时,尾调用优化的需求是如何产生的。 None 这些构造被设计为通过递归迭代,因为递归在 JVM 上效率不高。所以你一定是在尝试做一些不同的事情,但我不确定那可能是什么。
记下here:
Scala’s “for comprehensions” are syntactic sugar for composition of multiple operations with foreach, map, flatMap, filter or withFilter.
因此,鉴于 Scala 的 for 理解是语法糖,可以通过执行链接页面上显示的翻译在 Ceylon 中轻松模拟它们。
也就是说,Ceylon 和 Scala 是具有不同特性的不同语言,这导致了完成类似任务的不同 "best" 方法。因此,仅仅因为您可以 在 Ceylon 中模拟某些 Scala 功能并不意味着您应该。这实际上取决于您要解决的实际问题。
如何在 Ceylon 中实现“monadic for/yield”语法,例如用于蹦床,因为 Ceylon 不执行尾调用优化。 for/yield-syntax 需要引入新的变量名称,而使用 Tree-like 语法是不可能的。
在 Ceylon 中模拟 Scala 的 for/yield 的最佳方法是什么?
一种解决方案是使用(类型化的)地图。这感觉有点像基于像 Python 这样的映射创建一种内部(类型化)脚本语言。
有更好的解决方案吗?
您的问题有点令人困惑,因为:
- Ceylon 和Java 一样,根本不做尾递归优化。不是做"right"或"wrong"的问题;这是编译器根本不做的事情。
- Ceylon 中根本没有内置的
Monad
抽象。可以使用对类型函数的实验性支持编写自己的Monad
类型,但它不是 Ceylon 语言模块或 SDK 的一部分。 - Ceylon comprehensions(与 Scala 的
for
/yield
非常相似)被定义为跨越流,而不是 monad。
所以我想您问题的直接答案是 "no"。没有等价物。
为了对您的问题给出更有帮助的答案,我必须知道您在这里实际想要实现的目标。真的很难想象在使用 Ceylon 的内置流、序列、集合或元组时,尾调用优化的需求是如何产生的。 None 这些构造被设计为通过递归迭代,因为递归在 JVM 上效率不高。所以你一定是在尝试做一些不同的事情,但我不确定那可能是什么。
记下here:
Scala’s “for comprehensions” are syntactic sugar for composition of multiple operations with foreach, map, flatMap, filter or withFilter.
因此,鉴于 Scala 的 for 理解是语法糖,可以通过执行链接页面上显示的翻译在 Ceylon 中轻松模拟它们。
也就是说,Ceylon 和 Scala 是具有不同特性的不同语言,这导致了完成类似任务的不同 "best" 方法。因此,仅仅因为您可以 在 Ceylon 中模拟某些 Scala 功能并不意味着您应该。这实际上取决于您要解决的实际问题。