精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Scala講座:函數、操作符及與Java的比較

開發 后端
本文選自Scala講座的第三篇的第二部分,介紹了包和函數定義以及類型聲明,Scala中操作符也是方法,Java與Scala的混合,Scala與Java在語法上的差異。

本文節選自最近在日本十分流行的Scala講座系列的第三篇,由JavaEye的fineqtbull翻譯。本系列的作者牛尾剛在日本寫過不少有關Java和Ruby的書籍,相當受歡迎。

包和函數定義以及類型聲明

不過還是想把結婚這個動作明確表現出來呀,那就試著寫一下吧。對于函數式+面向對象的Scala來說有兩種考慮方式。

***個是面向對象的方法,當然就是讓Person類持有表示結婚的方法getMarriedTo(對方:Person)了。另一個就是函數式方法,結婚是那女雙方的事情,只在一方的Person類中定義getMarriedTo方法可能也不太確切,可以在Scala特有的單例對象中(object)定義marry方法來描述結婚這一事件。下面的例子中將Person類移到了Life包中,并在Life包中定義了同名的單例對象(singleton object),然后在Person類和對象中定義了getMarriedTo和marray方法。另外,因為這里的Person單例對象與Person類同名

且在同一個源文件里,所以他們互相又成為伴生對象和伴生類。

  1. package life {  
  2. class Person(val firstName:String, val lastName:String, var spouse:Person) {  
  3. def this(fn:String, ln:String) = this(fn, ln, null)  
  4. def introduction = "我的名字是," + firstName + " " + lastName +  
  5. (if (spouse != null",對方的名字是," + spouse.firstName + " " + spouse.lastName + "。" else "。")  
  6. def getMarriedTo(p : Person) {  
  7. this.spouse = p; p.spouse = this //姓可以在以后自由更改  
  8. }  
  9. override def toString : String = super.toString + " [姓: " + lastName + " 名: " + firstName + " 配偶: " +  
  10. (if (spouse != null" ("+ spouse.lastName + "," + spouse.firstName + ")" else "沒有") + "]" 
  11. }  
  12. object Person {  
  13. def marry(p1: Person, p2: Person): Unit = {  
  14. p1.spouse = p2; p2.spouse = p1 //姓可以在以后自由更改  
  15. }  
  16. }  
  17. }  

上述Unit類型代表不返回任何值,相當于Java中的void。如果想把Person類以別的名稱來使用則可以用import語句來聲明別名。比如以下程序中為Person類定義了名為Man的別名。

  1. scala> import life.{Person => Man}  
  2. import life.{Person=>Man}  

實際上述語句與以下聲明type別名的語句是一樣的

  1. scala> import life.Person  
  2. import life.Person  
  3. scala> type Man = Person  
  4. defined type alias Man  

正像這樣,我們可以利用Scala的交互式環境一邊寫簡潔的代碼一邊一點一點地確認結果來進行開發。還有,包和類都可以嵌套定義,這里就省略了。

Scala中操作符也是方法

實際上Scala并沒有內嵌在語言中的操作符。加法+、乘法*、減法-、除法/、字符串連接+和列表連接++等操作符都是Int、String或List等類型中的方法(有時可能是父類中的方法)。因此,操作符中的特殊字符在Scala中可以被用作方法名稱的一部分,這對于定義迷你語言(DSL,特定領域語言)來說是非常重要的。

那么,將“m先生和f女士結婚后f女士的姓變為m”這一動作以“m < + f”來表示吧。在Scala中這

表示“對接受對象m適用方法< +,參數為f”,是“m.< +(f)”的簡化形式。馬上就在Person類中定義一個兩元操作符方法“< +”吧。雖然返回值也可以是Unit,這里就以接受對象自己為返回值吧。

  1. class Person … {  
  2. …  
  3. def < +(p : Person): Person = { //姓與接受對象的姓相一致  
  4. this.getMarriedTo(p) //和p結婚返回值為Unit  
  5. p.lastName = this.lastName //改變姓,賦值表達式的返回值是Unit  
  6. this //以接受對象自己作為返回值  
  7. }  
  8. …  
  9. }  

下面的代碼是f嫁給了m,f的姓改為了m的姓了。

  1. scala> import life.Person  
  2. import life.Person  
  3. scala> val m = new Person("Fei""Zhang")  
  4. m: life.Person = life.Person@14683c0 [姓: Zhang 名: Fei 配偶: 沒有]  
  5. scala> val f = new Person("Can""Diao")  
  6. f: life.Person = life.Person@863941 [姓: Diao 名: Can 配偶: 沒有]  
  7. scala> m < + f  
  8. res0: life.Person = life.Person@14683c0 [姓: Zhang 名: Fei 配偶: (Zhang,Can)]  

到這里我們嘗試了一下兩元操作符,Scala也可以定義一元操作符,但不同的是方法名稱的格式為“unary_操作符”。

Java與Scala的混合

Scala可以非常方便的使用Java的類、接口以及其中定義的方法。不僅僅是調用方法,將Scala類定義為Java類或接口的子類或接口實現也是很容易的。還有,用scalac編譯Scala類后生成的僅僅是.class文件,完全可以毫無區別的把Java和Scala混在一起開發。

前面定義了life包,現在就定義一個單例對象Demo吧,在里面將嵌入使用Java的Swing庫的例子。將JFrame類在Demo中以Window為別名引入(import),然后就可以看看創建對象的樣子了。

  1. object Demo {  
  2. import javax.swing.{JFrame=>Window}  
  3. import javax.swing.JFrame._  
  4. val mameWindow = new Window("window 1")  
  5. mameWindow setSize(200150)  
  6. mameWindow setDefaultCloseOperation(EXIT_ON_CLOSE)  
  7. mameWindow setVisible(true)  
  8. }  

定義了該單例對象后,同是與該對象名同名的Demo類也被定義了。可以用Demo來引用該單例對象,如下所示執行后,可以看到窗口的左上角打開一個小窗口。

  1. scala> Demo  
  2. res0: Demo.type = Demo$@1205d8d 

Scala與Java在語法上的差異

這里簡單地列舉一下Scala與Java在語法上的差異。

• 類型的聲明不是“類型 變量 = 值”而是“變量:類型 = 值”。但是,在類型推斷可能的情況下類型聲明可以省略。

• 不可變的變量用val,可變的變量用var來聲明。任意的數據都可以用def來命名(包括val也可以替換成def)。使用def來聲明函數和方法。

• 語句分隔符“;”是可選的,通常用換行來表示。

• 一連串復合語句可以用“;”來分割,然后用“{”和“}”塊來包括起來。如果單語句的不用大括號包括也可以。例如for語句既可以是for(i < - List(1, 2, 3, 4)){println(i)},也可以是for(i < - List(1, 2, 3, 4)) println(i)。

• 包括數字、字符串和數組,所有的數據都是對象。包括Java的原類型int、double和bool等所有的數據都對應于Scala中的相應類。

• void作為Unit類來處理,Unit的唯一實例是()。

• 以array(i)來使用數組的索引而不是array[I]。數組項目的取得array(i)和更新array(i) = x也可以認為是調用array.apply(i)和array.update(i, x)方法。

• []可以用來指定范型的具體類型,比如type IList = List[Int]為聲明項目類型為Int的列表類型。可以用asInstanseOf[T]方法來強制轉換類型,雖然使用了范型之后大部分情況下是用不著的。

• for循環并不是語法,而是被定義為稱作for-comprehension的語法糖,***被轉換成map和filter等方法的組合。

• 有意放棄了靜態(static)的概念,而是用單例對象來取代了靜態對象和方法。不是用class而是用object像“object Singleton extends Object { val data: Int }”一樣被定義,其中的屬性可以用來代替靜態成員。

• 使用import語句來引入包和類,并用“_”代替了“*”。比如import javax.swing.JFrame; import javax.swing.JFrame._。可以格式 “import javax.swing.{JFrame=>MyWindow}”來聲明類型的別名。

結束語

下一講將說明以特征(Trait)為形式的mixin式的多重繼承方法、集合、for和map等高階函數、使用閉包的函數式編程。

【編輯推薦】

  1. Scala講座:面向對象和函數式的特點總結
  2. Scala講座:函數式編程處理樹結構數據
  3. Scala講座:編程的思考方法
  4. Scala講座:將函數作為***類對象來處理
  5. Scala講座:全局變量問題的解決
責任編輯:book05 來源: JavaEye博客
相關推薦

2009-07-21 09:31:00

Scala操作符

2009-07-21 09:31:00

Scala數學運算邏輯操作位操作符

2009-07-21 12:47:04

Scala私有字段定義操作符

2009-12-11 10:44:00

Scala講座函數 scala

2009-07-21 08:41:05

Scala操作符優先級

2009-12-11 10:42:00

Scala講座類定義構造函數

2009-08-19 17:38:17

C# 操作符分類

2021-10-31 18:59:55

Python操作符用法

2020-12-26 16:51:12

Python操作符開發

2010-07-14 14:55:07

Perl操作符

2009-08-19 17:26:28

C# 操作符

2010-07-13 11:11:39

Perl標量

2009-11-30 16:48:08

PHP操作符

2009-07-14 18:34:22

Jython操作符重載

2009-09-27 15:29:00

Scala講座面向對象Scala

2010-07-19 11:00:24

Perl操作符

2011-04-08 16:26:14

JavaScript

2010-07-14 14:30:31

Perl操作符

2009-09-24 09:41:00

Scala講座Scala

2009-09-27 15:23:00

Scala講座函數式編程Scala
點贊
收藏

51CTO技術棧公眾號

国产精品入口免费| 欧美日韩成人网| 色www免费视频| 成人高清免费在线| av电影一区二区| 国产精品欧美日韩久久| 欧美丰满艳妇bbwbbw| 奇米影视777在线欧美电影观看| 色综合中文字幕国产| 在线精品亚洲一区二区| 波多野结衣加勒比| 日本高清视频在线播放| 丰满白嫩尤物一区二区| 日本久久久久久久久| 国产欧美精品一二三| 国产精品69xx| 欧美国产丝袜视频| 高清国产在线一区| 中文字幕av网站| 影音先锋在线一区| 三级精品视频久久久久| 中文成人无字幕乱码精品区| 涩涩涩久久久成人精品| 日韩欧美成人精品| 亚洲精品蜜桃久久久久久| 国产51人人成人人人人爽色哟哟 | 一区二区三区日本久久久 | 亚洲曰韩产成在线| 五月天久久综合网| 三级视频网站在线| 成人福利电影精品一区二区在线观看| 国产欧美一区二区| xxxx日本免费| 老牛精品亚洲成av人片| 日韩一区二区三区电影在线观看| 黄色三级视频片| 欧美男人天堂| 亚洲成人av电影在线| 久久久久久久免费视频| 四虎久久免费| 日本一区二区免费在线观看视频 | 国产精品自产拍在线观| 精品人妻无码一区二区性色| 好看不卡的中文字幕| 日韩视频在线观看免费| 色欲狠狠躁天天躁无码中文字幕 | 亚洲日本无吗高清不卡| 噜噜噜噜噜在线视频| 男女精品网站| 7m精品福利视频导航| 精品欧美一区二区久久久久| 91精品国产91久久综合| 久久精品视频播放| 一起操在线播放| 亚洲视频一起| 欧美一级淫片007| 国产欧美精品aaaaaa片| av网站网址在线观看| 国产精品电影一区二区三区| 午夜欧美一区二区三区免费观看| 国产高清免费在线播放| 国产欧美日本一区二区三区| 日韩偷拍一区二区| 91社区在线| 亚洲图片欧美激情| 影音先锋成人资源网站| 手机av在线播放| 亚洲一区在线电影| 国产原创popny丨九色| 国内激情视频在线观看| 色域天天综合网| www.日本一区| 精品国产亚洲一区二区三区大结局| 亚洲综合在线第一页| av 日韩 人妻 黑人 综合 无码| 手机看片一区二区三区| 99国产精品久| 成人黄色免费片| hs视频在线观看| 成人综合婷婷国产精品久久蜜臀 | 国产成人亚洲一区二区三区| 69成人精品免费视频| 国产淫片av片久久久久久| 久久99久久99精品免观看软件| 欧美在线小视频| 网站在线你懂的| 国产福利一区二区精品秒拍| 亚洲女人被黑人巨大进入al| gogo亚洲国模私拍人体| 欧美日韩激情电影| 在线播放国产精品二区一二区四区| 精品人妻一区二区乱码| 天天躁日日躁狠狠躁欧美巨大小说| 亚洲网站在线观看| 精品97人妻无码中文永久在线| 一区二区久久| 欧美激情a在线| 91狠狠综合久久久| 国内精品视频在线观看| 菠萝蜜影院一区二区免费| 亚洲国产精一区二区三区性色| 久久一区二区三区超碰国产精品| 成人免费视频网址| 亚洲aⅴ乱码精品成人区| 国产东北露脸精品视频| 久久久福利视频| 免费日本一区二区三区视频| 午夜伦欧美伦电影理论片| 91看片在线免费观看| 大陆精大陆国产国语精品 | 色呦呦在线播放| 色综合久久88色综合天天免费| 91性高潮久久久久久久| 欧美男男gaytwinkfreevideos| 欧美xxxx14xxxxx性爽| 国产毛片欧美毛片久久久| 日本高清不卡免费| 老牛精品亚洲成av人片| 精品久久久999| 69亚洲精品久久久蜜桃小说| 国产成人午夜精品5599 | 性xxxxbbbb| 亚洲精品中文在线影院| 天堂社区在线视频| 卡通动漫国产精品| 欧美国产亚洲精品久久久8v| 一区二区的视频| 国产欧美日韩精品a在线观看| 国产精品久久久久久久久电影网| 激情开心成人网| 欧美成人伊人久久综合网| 欧美色视频一区二区三区在线观看| 国产精品一区毛片| 欧美精品videos| 99re热视频| 日韩av高清在线观看| 久草热久草热线频97精品| 五月婷婷视频在线观看| 91麻豆精品国产91久久久| 成年人在线免费看片| 亚洲一区视频| 久久精品国产美女| 性欧美18xxxhd| 日韩精品极品视频| 91美女免费看| 99re在线精品| koreanbj精品视频一区| 欧美色资源站| 26uuu亚洲国产精品| 少妇精品视频一区二区| 亚洲一二三区在线观看| 亚洲成人福利视频| 欧美日韩国产高清| 国产精品国产精品国产专区蜜臀ah | 成人在线观看免费视频| 国产小视频国产精品| 69视频免费看| 中文字幕av一区二区三区高 | 激情久久一区二区| www.xxxx欧美| 国产日韩欧美一区二区东京热 | 青青草视频在线视频| 日韩有吗在线观看| 欧美激情网站在线观看| 四虎精品在线| 色94色欧美sute亚洲线路一久| 非洲一级黄色片| 久久国产精品第一页| 欧美少妇在线观看| 国产精品99久久免费观看| 68精品国产免费久久久久久婷婷| 青青青草原在线| 欧美视频精品在线| 国产一区二区播放| 成人激情免费电影网址| 91传媒久久久| 91综合视频| 国产伦精品一区二区三区免费视频 | 亚洲精品久久久狠狠狠爱| 2021国产精品久久精品| 欧美一级黄色影院| 99久久夜色精品国产亚洲狼| 96久久精品| 亚洲国产福利| 久久精品久久久久久| 三级在线观看网站| 欧美影视一区在线| 久久综合加勒比| 久久久www免费人成精品| 国产无遮挡猛进猛出免费软件| 欧美日韩专区| 五月天国产一区| 国产成人av毛片| 国产精品一区二区女厕厕| 都市激情久久综合| 在线观看免费高清视频97| 亚洲免费视频网| 17c精品麻豆一区二区免费| 香蕉久久久久久av成人| 久久免费高清| 青青草视频在线视频| 欧美日韩精品一区二区视频| 成人午夜电影免费在线观看| 免费欧美电影| 午夜免费日韩视频| 黄网站免费在线观看| 亚洲免费电影一区| 精品国产无码一区二区三区| 91福利在线免费观看| 国产主播在线观看| 亚洲视频在线观看一区| 成人黄色免费网址| caoporn国产精品| 国产欧美精品一二三| 日韩av在线发布| 男人用嘴添女人下身免费视频| 国产高清一区| 日韩三级电影| 欧美猛男同性videos| 精品久久久久久中文字幕动漫| 国产精品久久久久久久久久久久久久久| 欧美在线中文字幕| av电影免费在线看| 欧美老女人xx| 快射av在线播放一区| 一区二区亚洲精品国产| 深夜视频在线免费| 亚洲国内精品视频| www.黄色av| 欧美一区永久视频免费观看| 在线播放一级片| 欧美影院一区二区| 最好看的日本字幕mv视频大全| 欧美日韩在线第一页| 男人天堂av电影| jizz一区二区| 免费观看污网站| 国产成人一区二区精品非洲| a级大片免费看| 国产毛片精品视频| 日本中文字幕在线不卡| 国产乱理伦片在线观看夜一区| 久久国产这里只有精品| 日韩一区精品字幕| 欧美污视频网站| 欧美亚洲免费| www.四虎成人| 日本大胆欧美人术艺术动态| 黄色三级视频在线| 久久av资源网| 无尽裸体动漫2d在线观看| 美女视频一区二区| 路边理发店露脸熟妇泻火| 国产精品黑丝在线播放| 亚洲一区二区不卡视频| 99久久99久久精品国产片桃花| 亚洲资源在线网| 天天综合亚洲| 欧美视频在线第一页| 黄色国产精品| 鲁一鲁一鲁一鲁一色| 性一交一乱一区二区洋洋av| 色多多视频在线播放| 精品一区二区三区免费观看 | 久久av高潮av| 1024日韩| 欧美 日韩精品| 蜜桃视频第一区免费观看| 一区二区久久精品| 国产成人在线视频播放| 午夜视频在线观看国产| 91麻豆福利精品推荐| 51妺嘿嘿午夜福利| 亚洲色图在线视频| 日本一区二区不卡在线| 91成人网在线| 国产日韩欧美中文字幕| 日韩精品久久久久久福利| 国产精品99999| 欧美成人第一页| 免费一二一二在线视频| 国产精品美女呻吟| 欧美日韩黄色| 欧美精品一区在线发布| 亚洲成av人电影| 国产伦精品一区二区三区四区视频_ | 亚洲一区二区三区在线免费| 久久久精品动漫| 欧美激情黄色片| 成人免费观看cn| 麻豆国产一区二区| 无码任你躁久久久久久老妇| 中文字幕乱码亚洲精品一区| 久久久久久久久久综合| 在线观看日韩精品| 亚洲欧美强伦一区二区| 中日韩午夜理伦电影免费| 午夜成人免费影院| 一区二区欧美日韩视频| 欧美高清另类hdvideosexjaⅴ| 日本精品视频在线| 亚洲日本va中文字幕| 色女人综合av| 亚洲精选91| 欧美国产在线一区| www一区二区| 久久中文字幕在线观看| 欧美群妇大交群中文字幕| 国产美女www| 日韩免费在线观看| 一本一道波多野毛片中文在线| 91精品国产沙发| 免费一级欧美片在线观看网站| 日韩欧美电影一区二区| 一区在线视频观看| 在线观看av免费观看| 国产午夜精品一区二区三区嫩草 | 久久精品夜色噜噜亚洲aⅴ| 人妻人人澡人人添人人爽| 欧美三级中文字| 国内av一区二区三区| 91国产一区在线| 最新国产精品精品视频| 国产手机视频在线观看| 奇米777欧美一区二区| 在线免费观看成年人视频| 亚洲午夜羞羞片| 国内老熟妇对白hdxxxx| 色爱精品视频一区| 97人人做人人爽香蕉精品| 欧美大陆一区二区| 一区二区激情| 国产 中文 字幕 日韩 在线| 亚洲国产日韩一级| www.激情五月| 欧美激情精品久久久久久久变态| 日韩伦理一区二区| 亚洲日本无吗高清不卡| 麻豆传媒一区二区三区| 国产黄色大片免费看| 日本久久一区二区| 国产精品一级伦理| 国产精品久久久久久久久免费| 精品国产中文字幕第一页| 50路60路老熟妇啪啪| 久久久精品国产99久久精品芒果| 好吊妞视频一区二区三区| 日韩av在线最新| 巨茎人妖videos另类| 欧洲一区二区日韩在线视频观看免费 | 六月婷婷综合网| 久久久欧美一区二区| 美女午夜精品| 精品久久久久av| 欧美国产一区二区| 国产美女主播在线观看| 欧美精品在线播放| www.神马久久| 无码精品a∨在线观看中文| 久久久久久一级片| 中日韩av在线| 欧美老女人性视频| 另类春色校园亚洲| 熟妇人妻va精品中文字幕| 欧美高清在线视频| 国产精品国产三级国产普通话对白| 欧美大尺度激情区在线播放| 高潮按摩久久久久久av免费| 日本免费黄视频| 亚洲国产精品高清| www.中文字幕| 欧美一级电影在线| 国产精品久久久久无码av| 精人妻一区二区三区| 高跟丝袜一区二区三区| 91在线不卡| 国产欧美日韩伦理| 日韩二区在线观看| 校园春色 亚洲| 国产丝袜一区二区三区| 精品久久99| 和岳每晚弄的高潮嗷嗷叫视频 | av成人免费网站| 亚洲国产成人久久综合一区| 国产私拍福利精品视频二区| 欧美性受黑人性爽| 久久在线观看免费| 国产精品羞羞答答在线| 26uuu另类亚洲欧美日本一| 久久综合国产| 无码一区二区精品| 欧美一区午夜精品| 波多野结衣亚洲| 男人日女人的bb| 国产日产精品一区| 99久久精品免费看国产交换| 日本久久精品视频| 国产一区亚洲| 免费一级suv好看的国产网站 | 欧美变态另类刺激|