昨天我看到公告从锡兰队已经公开发布的第一个里程碑版本.从我所看到的,它看起来很有趣.
从查看锡兰的信息来看,它的目的似乎与Scala的目的基本相符......
锡兰深受Java的影响.你看,我们是Java的粉丝,但我们知道它的局限性.Ceylon保留了Java的最佳位置,但改进了我们的体验令人讨厌,乏味,令人沮丧,难以理解或出错的东西.
所以,在一个坚果中,Ceylon和Scala似乎在说(在我的解释中)我们喜欢Java,但是有烦恼,所以我们希望建立在Java之上以使生活更美好.
但是,我想要知道的是,为什么创建了Yet-Another-Java-Killer,因为有些人已经向锡兰收费,而Scala已经存在?是什么让锡兰与Scala分开?
注意:请不要"我喜欢X over Y",我希望客观地了解Ceylon为开发社区提供的服务.
锡兰打到1.0最近引起了我的注意.最有趣的特性是它可以为JVM和Javascript引擎(node.js,浏览器)编译,因此它可以在服务器后端和浏览器中运行的Web应用程序之间进行代码共享.
我已经开始查找文档以获取有关如何使用Ceylon创建WAR可部署应用程序的详细信息,其中我有一些REST端点为浏览器端提供服务.我并不期待Spring WebMVC支持,尽管这将是我的最终目标.令我惊讶的是,我没有在这个主题中找到任何有用的东西.当我尝试以我描述的方式定位像Jetty或Tomcat这样的Servlet引擎时,是否有任何建议如何使用Ceylon?
现在我正在Java应用程序中执行以下操作:
类似的事情也很好,客户端代码也是从Ceylon代码转换而来的.正如我所看到的,Ceylon使用它自己的项目布局和构建系统,尽管我会更乐意使用Maven或Gradle来避免过多地避开现有项目.
我尝试使用Ceylon和Eclipse.我已经安装了JDK.我的计算机有Java版本7和8.
Eclipse的配置看起来不错,我可以看到Ceylon透视图,创建项目,我有一个Ceylon文件
void hello() {
print("hello world");
}
Run Code Online (Sandbox Code Playgroud)
...但如果我启动一个程序,我有一个窗口错误"没有锡兰runnable元素"
要运行,请单击Run as> Ceylon Java application
我不明白这个错误.问题是什么?
我可以使用锡兰创建Android应用程序吗?既然Ceylon可以运行任何JVM,据我所知,Ceylon实现创建Android应用程序应该非常简单.它是否像Scala那样App的大小变得相当大并且必须使用proguard或SBT-android插件?它有多可行?锡兰可以为此做好选择吗?如果是的话,有人可以指出我正确的方向吗?
我正在玩这种美丽的语言,看到了一个叫做的功能noop
.
正如文档所说,它是一个无效的函数!
那么为什么我会使用一个什么都不做的函数呢?是在组装中添加"Nop"(用于管道等)但是这样太低级了不是吗?
锡兰有可能都被认为是某种数组的东西几个不同的概念:List
,Tuple
,Sequence
,Sequential
,Iterable
,Array
,Collection
,Category
,等什么是这些这些类型,我应该何时使用它们有什么不同?
我已经阅读了有关序列的演练,但我真的不明白为什么有一种方法来定义文字Iterable和文字序列.
{String+} iterable = {"String1", "String2"};
[String+] sequence = ["String1", "String2"];
Run Code Online (Sandbox Code Playgroud)
由于Sequence是Iterable的子类型,它似乎应该能够完成Iterable所做的一切以及更多.
那么拥有Iterable花括号初始化程序需要什么呢?你想什么时候使用它而不是方括号序列版?
我有一个泛型函数需要创建一个元组来调用一个函数,其参数我不知道它的类型.
像这样的东西(array
在这个例子中除外是由一些外部代码创建的,所以我不能直接应用该函数):
Result apply<Result, Where>(
Anything[] array,
Callable<Result, Where> fun)
given Where satisfies Anything[] => nothing;
Run Code Online (Sandbox Code Playgroud)
是否有一种类型安全的方法来实现此方法并使用给定的参数调用函数?
我想从包装类外部实例化一个内部非静态接口.
这可能吗?
请考虑以下代码:
shared class AOuterClass() {
Integer val = 3;
shared interface AInterface {
shared Integer val => outer.val;
}
}
void test() {
AOuterClass o = AOuterClass();
object impl satisfies ???.AInterface{}
}
Run Code Online (Sandbox Code Playgroud)
我认为object impl satisfies o.AInterface{}
这是我合理的直觉,但编译器不允许它.