对于我这个一直沉溺在Java语言,拒绝接受ruby,groovy等动态语言的老古董来说,Symbol是在是个奇怪的东西,比较难理解,Scala文档中所有关于Symbol的字我都认识,但结合在一起就看不明白了,用处何在?
专门找了ruby中关于Symbol的学习资料,看了后,领悟如下:
1.Symbol 是Scala中所谓literal类型的一种,literal字面意思为文本,表现为可以直接在代码中写为常量值的东西,官方guide里面又细分为整数文本、字符文本、布尔文本,符号文本等
2.Symbol 本质上是字符串的再封装,相同名字(准确的说是值)的Symbol具有相同的instance,而相同名字(也是值)的字符串并不一定是同一个instance
3.如某字符串反复出现,而且值不会改变,那么,可以使用Symbol,但其实并不必须,同样可以使用字符串的变量名称。
val s ="abc" println(s) println('abc) f2('abc) f2(s)
4.Scala中需要使用Symbol的地方应该不多,源于Scala是静态检查类型语言,不同于动态语言,直接使用值,临时定义变量。
换言之,可以理解为static的字符串,与final无关。