当前位置:网站首页>Scala学习:类和对象
Scala学习:类和对象
2022-07-30 18:45:00 【我爱夜来香A】
一、类
class ChecksumAccumulator {
private var sum = 0
def add(b:Byte):Unit = {
sum += b }
def checksum():Int = ~(sum & 0xFF) + 1
}
- Scala中类、方法、成员变量都是默认public级别,不用声明
- Scala中分号是可选的
- Scala返回值类型是可选的,如上述eg中Unit和Int可以不用声明,Scala会做类型推断
二、单例对象
package Test
import scala.collection.mutable
class ChecksumAccumulator {
private var sum = 0
def add(b:Byte):Unit = {
sum += b }
def checksum():Int = ~(sum & 0xFF) + 1
}
object ChecksumAccumulator{
private val cache = mutable.Map.empty[String,Int]
def calculate(s:String):Int = {
if (cache.contains(s))
cache(s)
else{
val acc = new ChecksumAccumulator
for (c <- s)
acc.add(c.toByte)
val cs = acc.checksum()
cache += (s -> cs)
cs
}
}
}
- Scala比Java更面向对象,其中一点就是Scala中不允许有静态成员
- 但Scala提供了另一种形式-单例对象,就是上图中的object{}部分,当单例对象和某个类共用一个名字时,它被称为这个类的伴生对象,类也被称为单例对象的伴生类。必须在同一个源码文件中定义类和类的伴生对象
- 类和伴生对象可以互相访问对方的私有成员
- 没有同名的伴生类的单例对象被称为孤立对象,通常定义main方法,作为应用程序的入口
- 此外,Java和Scala的一个重大区别是:Java要求将公共的类放入跟类同名的文件中,如若上述代码为Java代码,则文件名必须为ChecksumAccumulator.java,但Scala可以随意命名文件名,不过最好文件和类同名
三、应用程序入口
import Test.ChecksumAccumulator.calculate
object SumTest {
def main(args:Array[String]) = {
val str = "lishiming"
println(calculate(str))
}
}
- Scala同Java一样,应用程序的入口都在main方法中,scala的main方法定义在单例对象中
import Test.ChecksumAccumulator.calculate
object SumTest extends App {
val str = "lishiming"
println(calculate(str))
}
- 如上所示,scala提供了另一种应用程序的入口,不用编写main方法,只需在单例对象后extends
App,然后把打算放在main方法中的代码直接写在单例对象后的花括号中即可
边栏推荐
- Mysql执行原理剖析
- MYSQL(基本篇)——一篇文章带你走进MYSQL的奇妙世界
- What is the value of biomedical papers? How to translate the papers into Chinese and English?
- "Ruffian Heng Embedded Bimonthly" Issue 59
- Application of time series database in the field of ship risk management
- 3D机器视觉厂商的场景争夺战役
- What kind of framework is friendly to developers?
- 深化校企合作 搭建技术技能人才成长“立交桥”
- Pytorch foundation -- tensorboard use (1)
- NC | 西湖大学陶亮组-TMPRSS2“助攻”病毒感染并介导索氏梭菌出血毒素的宿主入侵...
猜你喜欢

C# wpf 无边框窗口添加阴影效果

【Swords Offer】Swords Offer 17. Print n digits from 1 to the largest

NC | 西湖大学陶亮组-TMPRSS2“助攻”病毒感染并介导索氏梭菌出血毒素的宿主入侵...

SwiftUI iOS 精品开源项目之 完整烘焙食品菜谱App基于SQLite(教程含源码)

ByteArrayInputStream class source code analysis

The Meta metaverse division lost 2.8 billion in the second quarter!Still want to keep betting?Metaverse development has yet to see a way out!

延时队列优化 (2)

沉浸式体验科大讯飞2022消博会“官方指定产品”

NC | Tao Liang Group of West Lake University - TMPRSS2 "assists" virus infection and mediates the host invasion of Clostridium sothrix hemorrhagic toxin...

- daily a LeetCode 】 【 191. A number of 1
随机推荐
node封装一个控制台进度条插件
Scrapy framework is introduced
LeetCode 练习——关于查找数组元素之和的两道题
【Swords Offer】Swords Offer 17. Print n digits from 1 to the largest
ESP8266-Arduino programming example-HC-SR04 ultrasonic sensor driver
DM8:单库单实例搭建本地数据守护服务
CCNA-ACL(访问控制列表)标准ACL 扩展ACL 命名ACL
WeChat Mini Program Cloud Development | Urban Information Management
LocalDate时间生成
Critical Reviews | 南农邹建文组综述全球农田土壤抗生素与耐药基因分布
Web结题报告
Basic use of scrapy
博纳影通过IPO注册:阿里腾讯是股东 受疫情冲击明显
尊重客观事实
CMake库搜索函数居然不搜索LD_LIBRARY_PATH
【Pointing to Offer】Pointing to Offer 22. The kth node from the bottom in the linked list
开心的聚餐
"Ruffian Heng Embedded Bimonthly" Issue 59
What kind of framework is friendly to developers?
Scrapy框架介绍