问题标签 [ceylon]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ceylon - 在 Ceylon 中编写 if 语句
我的任务是在 Ceylon 编写文件编写器,在此过程中,我遇到了在 Ceylon 编写 if 语句的巨大困难,当面对强大的类型正确向导时,我将被允许通过。遥远的锡兰大地狭窄的编译桥:
我得到的错误是“错误:(10、1)锡兰:语法不正确:'if'处缺少EOF”
这是我的 if 语句(第一行是第 10 行):
编辑:这是我根据 Bastien Jansens 建议更新的 if 语句。但是,错误保持不变:(
这是我的应用程序的完整源代码:
guava - Ceylon 模块系统:Guava 类不匹配,即使依赖关系树中只有一个 Guava
我通过子类化一个将 Google Guava 作为构造函数参数的类来为 JSimpleDB(一个持久性库)定义一个适配器Converter
:
JSimpleDB 默认不导出 Guava,所以我添加了以下内容overrides.xml
以确保正确的类对我的应用程序可见(我没有使用--auto-export-maven-depencies
or --flat-classpath
):
这导致以下模块层次结构(我的代码在 中fun.uschool.user.impl
):
正确的com.google.guava:guava
模块应该暴露给我的程序,确实我可以 import Converter
,但是当我尝试编译上面的代码时,我得到以下错误:
所以显然不知何故com.google.guava:guava
导入了错误,即使模块依赖关系树中只有 1 个可见。如何导入正确的?
这是ceylon info
's 依赖分析的输出:
ceylon - 是否有通配符可用于 Ceylon 中的 switch 表达式/语句?
标题是我的问题。具体来说,通配符在匹配元组中的值时很重要。
在 OCaml 中,可以:
允许匹配没有通配符的元组值的“开关”结构是没有用的。在锡兰,我认为开关坏了;-)。
interface - 实现内部非静态接口
我想从包装类外部实例化一个内部非静态接口。
这可能吗?
考虑以下代码:
我认为object impl satisfies o.AInterface{}
这是我合理的直觉,但编译器不允许这样做。
proxy - 锡兰的 RMI/Proxy 以及与非默认方法的关系
我想在锡兰/为锡兰编写一个 RMI 库(因为到目前为止我还没有找到)。
我需要的第一件事是代理。在Java中,我使用了类似的东西
1.锡兰有类似的东西吗?(还没有找到东西)
尝试自己编写类似的东西时,我遇到了这个使用字节码操作的 JVM 解决方案。漂亮,正是我想要的。
请注意,这甚至可以为一个类生成一个代理,而不仅仅是 Java 中的接口。在锡兰这应该是合法的,因为没有字段,我们可以用方法调用模拟整个类。
2.如果为类创建代理是不行的,请告诉我。另外,关于代理的锡兰直觉/未来是什么?应该有(没有)代理吗?
在代理的未来,我们有一个主要问题:
在锡兰我们有default
关键字,没有它,方法就不能被提炼/覆盖。这也会产生final
用于编译的 Java 输出类的方法。因此(甚至不是)字节码操作可以覆盖那些并将它们重定向到调用处理程序/拦截器。
3.我们如何处理这个问题?
我假设根本没有?我完全明白不允许优化方法和default
/final
关键字的想法,但这会阻碍类的 RMI/代理。
4.类的代理是个坏主意吗?
是的,我目前正在考虑和调查的问题还有很多:JS 实现、接口和默认方法等
这些点似乎是目前最相关的,所以让我们从这里开始。
if-statement - 检查枚举类的类型
我有一个枚举抽象类:
还有一个尝试检查 aFoo
是否不是 a的函数bar
:
我得到错误
ceylon - 实施 Summable 时遇到问题
我正在尝试实现类DistanceCM
和DistanceMM
,并且我希望它们可以互换地求和,只要它们都继承自Distance
.
但是,我收到此错误:
“错误:(46、76)锡兰:声明'Summable'的类型参数'Other'有参数'Distance',它不能分配给'Other'的上限'Summable'”
...我无法破译...错误消息指的是下面代码中的这一行:
这是当前代码:
ceylon - 顶级函数名称受限?
通常 Ceylon 喜欢文件名与在该文件中声明的(唯一)类的名称相对应。
当我尝试使用顶级函数遵循相同的模式时,IDE 对我咆哮。例子:
文件结构:
- 实用程序/
- 文件/
- 包.json
- stringFromFile.ceylon
- 模块.ceylon
- 包.ceylon
- 文件/
文件 stringFromFile.ceylon 的内容:
IDE 生成的错误消息是:“重复声明。名称 stringFromFile 在此范围内不是唯一的”。当光标悬停在“stringFromFile”的函数名称声明上时,会出现此消息。
stringFromFile 的这个声明是代码库中唯一的声明(通过全局搜索显示)。唯一的“重叠”名称是包含文件的名称。为什么这两个名称不允许重叠?
ceylon - Initialising Sequential values with for loop?
Is there any way to initialize a Sequential value not in one fellow swoop?
Like, can I declare it, then use a for loop to populate it, step by step?
As this could all happen inside a class body, the true immutability of the Sequential value could then kick in once the class instance construction phase has been completed.
Example:
This code doesn't work, as I get this error:
Error:(12, 9) ceylon: illegal receiving type for index expression: 'Sequential' is not a subtype of 'KeyedCorrespondenceMutator' or 'IndexedCorrespondenceMutator'
So what I can conclude is that sequences must be assigned in one statement, right?
ceylon - 递增整数
我在增加变量整数时遇到了一些麻烦。这段代码:
给出这个输出:
而预期的输出是:
那是怎么回事?