scala 与groovy 语法对比----长期更新

scala 与groovy 语法对比----长期更新

最近在学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 field

override def log(msg: String){print("23")}

def fun(){}

}

trait ShortLogger1 extends Logged {

val maxLength = 16 // A concrete field

override 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")结果:

16

2sdf3

总结:groovy的语法看上去更智能一点,但是它却强硬地帮我们做出了选择,后者一定会覆盖前者。而sacla看上去比较死板,如果需要用到多个特性并保留每个属性或方法,那么各个trait的属性名和方法名尽量不应该相同,可以加个前缀。

相关科技文章

三国战纪七星转生
365bet提现多久到账

三国战纪七星转生

⌚ 08-26 👁️ 9411
86型开关插座怎么接线,家庭电路布线指南
365bet提现多久到账

86型开关插座怎么接线,家庭电路布线指南

⌚ 08-19 👁️ 9496
小米5X最新报价
365日博体育备用

小米5X最新报价

⌚ 08-13 👁️ 4395
大话西游手游新区多久可以转服 新区移民时间要求
365bet提现多久到账

大话西游手游新区多久可以转服 新区移民时间要求

⌚ 07-24 👁️ 2380

合作伙伴