例如,如何在锡兰中实现“单字for / yield”语法?因为Ceylon不会执行尾部呼叫优化,所以可以用于蹦床。 for / yield语法要求引入新的变量名,这是使用类树语法无法实现的。
在锡兰模拟Scala的收益率的最佳方法是什么?
一种解决方案是使用(类型化)映射。感觉有点像根据Python之类的地图创建内部(类型化)脚本语言。
有更好的解决方案吗?
最佳答案
您的问题有点令人困惑,因为:
像Java一样,Ceylon根本不执行尾递归优化。这不是“正确”或“错误”的问题。这是编译器根本不做的事情。
锡兰中根本没有内置的Monad
抽象。可以使用对类型函数的实验性支持来编写自己的Monad
类型,但这不是Ceylon语言模块或SDK的一部分。
锡兰comprehensions(与Scala的for
/ yield
大致相似)被定义为在流范围内,而不是在单声道范围内。
因此,我想您问题的直接答案是“否”。没有对等的东西。
要为您的问题提供更有用的答案,我必须知道您在这里实际要达到的目标。很难想象当使用Ceylon的内置流,序列,集合或元组时,如何会出现对尾部调用进行优化的需求。这些构造均未设计为通过递归进行迭代,因为递归在JVM上效率不高。因此,您必须尝试做一些不同的事情,但是我不确定这可能是什么。