成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

學習Scala的二維布局庫和抽象類

開發 后端
本文節選自Martin Odersky,Lex Spoon和Bill Venners所著,Regular翻譯的《Programming in Scala》的第十章。Scala是一種針對 JVM 將函數和面向對象技術組合在一起的編程語言。

二維布局庫

作為本章運行的例子,我們將創造一個制造和渲染二維布局元素的庫。每個元素將代表一個填充字符的長方形。方便起見,庫將提供名為“elem”的工廠方法來通過傳入的數據構造新的元素。例如,你將能通過工廠方法采用下面的寫法創建帶有字串的元素:

  1. elem(s: String): Element  

51CTO編輯推薦:Scala編程語言專題

正如你所見,元素將以名為Element的類型為模型。你將能在元素上調用above或beside,傳入第二個元素,從而得到合并了這兩個的新元素。例如,下面的表達式將構建一個包含兩列,每列高度為二,的更大的元素:

  1. val column1 = elem("hello") above elem("***")  
  2. val column2 = elem("***") above elem("world")  
  3. column1 beside column2  
打印這個表達式的結果將是:

  1. hello ***  
  2. *** world  
在對象能通過簡單的部件及組合操作符的幫助被構建的系統中,布局元素是個好的例子。本章里,我們將定義類使得元素對象能被構建自數組,行記錄,以及長方形——簡單部件。我們還將定義組合操作符above和beside。這種組合操作符也經常被稱為組合子:combinator,因為它們把某些區域的元素組合成新的元素。

以組合子的方式思考問題通常是實現庫的設計的好方法:它能回報以考慮在應用域構建對象的基礎方法。什么是簡單對象?用什么方式能讓更多有趣的對象通過簡單對象構造出來?組合子是怎么掛在一起的?什么是最通用的組合?它們滿足任何有趣的規則嗎?如果你對這些問題都有好的答案,你的庫設計就在正軌上了。

抽象類

我們的***個任務就是定義代表布局元素的類型Element。由于元素是二維的字符長方形,包括成員,指向布局元素內容的contents,是合情合理的。內容可以被表達成字串數組,這里每個字串代表一行。因此,contents返回的結果類型就是Array[String]。代碼10.1展示了它看起來的樣子。

這個類里,contents被聲明為沒有實現的方法。換句話說,方法是類Element的抽象:abstract成員。具有抽象成員的類本身必須被聲明為抽象的,只要在class關鍵字之前加上abstract修飾符即可:

  1. abstract class Element {  
  2. def contents: Array[String]  
  3. }  
代碼 10.1 定義抽象方法和類

  1. abstract class Element ...  
abstract修飾符說明類或許有沒實現的抽象成員。結果,你不能實例化抽象類。如果你嘗試這么做,你會得到編譯器錯誤:

  1. scala> new Element  
  2. < console>:5: error: class Element is abstract;  
  3.  cannot be instantiated  
  4.  new Element  
  5.  ˆ  
本章后面你會看到如何創建類Element的子類,你將能實例化它們因為它們補上了缺失的contents定義。

請注意類Element的contents方法并沒帶有abstract修飾符。如果方法沒有實現(也就是說,沒有等號或方法體),它就是抽象的。不像Java,方法的聲明中不需要(或允許)抽象修飾符。擁有實現的方法被稱為具體的:concrete

另一個術語用法需要分辨聲明:declaration定義:definition。類Element聲明了抽象方法contents,但當前沒有定義具體方法。然而下一節,我們要定義一些具體方法來加強Element。

【相關閱讀】

  1. Scala學習:叫名參數by-name parameter
  2. Scala:如何編寫新的控制結構
  3. Scala學習:Curry化的函數
  4. Scala學習:簡化客戶代碼
  5. 減少Scala中的代碼重復

責任編輯:book05 來源: Artima
相關推薦

2010-03-04 09:40:04

Java接口抽象類

2009-06-29 15:15:00

抽象類Java

2011-06-28 10:55:20

C#接口抽象類

2012-02-29 09:32:01

Java

2009-08-03 18:12:31

C#抽象類

2009-04-30 15:15:01

Java抽象類接口

2011-07-12 15:58:48

java抽象類接口

2011-07-06 10:33:31

C#

2011-05-19 18:01:56

JAVA

2009-06-14 21:31:29

Java抽象類Java接口

2009-06-16 11:30:00

Java抽象類Java接口

2011-12-22 10:48:21

Java

2015-03-23 09:33:43

Java抽象類Java接口Java

2011-07-10 14:07:59

JAVA

2009-08-10 10:04:25

C#抽象類C#接口

2009-07-20 16:56:51

Scala類的定義

2009-08-14 15:54:17

C#接口和抽象類

2009-07-30 18:36:00

C#接口C#抽象類

2009-12-02 14:55:46

PHP抽象類abstr

2009-09-04 13:31:33

C#抽象類
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天天干视频| 黄色在线免费观看视频网站 | 欧美在线视频不卡 | 极品粉嫩国产48尤物在线播放 | 97精品国产97久久久久久免费 | 欧美日韩一卡 | 亚洲免费精品 | 国内精品久久久久久 | 国产一区二区在线免费 | 免费特黄视频 | 九九亚洲 | 亚洲一区二区三区免费观看 | 羞羞视频网站免费观看 | 欧美激情久久久久久 | 国产精品美女久久久av超清 | 久久久久久久久淑女av国产精品 | 欧美午夜影院 | 夜夜操天天操 | 无码国模国产在线观看 | 亚洲男人天堂2024 | 日本精品久久久久 | 亚洲精久久久 | 国产97碰免费视频 | 日本三级视频 | 欧美天堂在线 | 亚洲精品一区二区 | 成人午夜影院 | 国产亚洲精品一区二区三区 | 国产成人a亚洲精品 | 国产亚洲日本精品 | 黄色网毛片 | 欧美精品一区二区在线观看 | 欧美第一区 | 亚洲最新网址 | 国产在线一区二区三区 | 99在线精品视频 | 久久人人国产 | 欧美日韩国产在线观看 | 日韩第1页| 久久精品 | 午夜视频在线播放 |