scala 与groovy 语法对比----长期更新
来源:互联网 发布:淘宝如何上新 编辑:程序博客网 时间:2024/04/29 11:16
最近在学scala的同时也在接触groovy,因为每个语言都有很多相同点和不同点,拿出来比较就不容易混乱了。太基本的语法这里就不列出来对比了,只列出些遇到的比较重要的语法或者特性之间容易混淆的东西。
一、traits 特性
在scala中 traits的出现是为了代替java中的interface,与interface不同的是,interface只可以声明抽象方法,而traits可以声明抽象/具体属性,抽象/具体方法。可以这么说,trait内部的写法可以与一个普通的类没什么区别。并且trait可以被多重继承。
在groovy中也是如此。
那么它们有什么不同呢?普通的语法格式这里就不指出来了,就说说多重继承的区别。
1-1摆例子
scala代码
trait Logged {def log(msg: String) // This method is abstract}trait ShortLogger extends Logged {val maxLength = 15 // A concrete fieldoverride def log(msg: String){print("23")}def fun(){}}trait ShortLogger1 extends Logged { val maxLength = 16 // A concrete fieldoverride def log(msg: String){print("2sdf3")} def fun(){}}// 这里会报错,因为scala并不知道使用哪个maxLength属性和fun()方法,解决办法是 分别override覆盖maxLength属性和fun()方法class SavingsAccount extends ShortLogger with ShortLogger1{ /* override val maxLength = 17*/ }groovy代码:
trait Logged { void log(String msg){}}trait ShortLogger extends Logged { def maxLength = 15 // A concrete field void log(String msg){print("23")}}trait ShortLogger1 extends Logged { def maxLength = 16 // A concrete field void log(String msg){print("2sdf3")}}// 这里实现的两个traits中,后者会覆盖前者class SavingsAccount implements ShortLogger , ShortLogger1{}def sa = new SavingsAccount();println(sa.maxLength);sa.log("haha")结果:
162sdf3
总结:groovy的语法看上去更智能一点,但是它却强硬地帮我们做出了选择,后者一定会覆盖前者。而sacla看上去比较死板,如果需要用到多个特性并保留每个属性或方法,那么各个trait的属性名和方法名尽量不应该相同,可以加个前缀。
1 0
- scala 与groovy 语法对比----长期更新
- [长期更新]Es5与Es6对比
- 长期更新 Java语法小黑屋
- 【C#】C# 语法总结--长期更新
- scala与Java性能对比
- groovy语法
- monodb 与sql语法对比
- MySQL与Oracle 语法对比
- Swift与OC语法对比
- mysql与mongoDB语法对比
- mongodb 与mysql 语法对比
- C++ 与 python 语法 对比
- Groovy与JAVA实现Visitor模式的对比
- scala与java对比学习(一)
- scala与java的性能对比
- archlinux的安装与简单配置(长期更新)
- JS作用域与new关键字——长期更新
- ARM拾遗(长期更新)
- docker 基础命令之镜像篇
- 小心,Android木马工具SpyNote免费啦!远程监听就是这么简单
- Goldbach's Conjecture
- 抠图二重奏——人物头像
- 搜索后分页
- scala 与groovy 语法对比----长期更新
- hdu 2048 神、上帝以及老天爷
- PULL解析XML文件
- 杭电4857逃生
- js之严格模式
- Log4J的配置详细说明
- [JDBC]Eclipse连接MySQL数据库(傻瓜篇)
- 基于C++WebService开发库—gsoap
- 微信支付现金红包接口已升级,请参照最新版开发文档进行开发