1. 程式人生 > >快學scala 第七章 包和引入 讀書筆記及習題答案程式碼

快學scala 第七章 包和引入 讀書筆記及習題答案程式碼

chapter 7 包和引入

標籤:快學scala

一、筆記

  1. scala中的包名是相對的,原始檔的目錄與包之間沒有強制的關聯關係,完全可以在同一檔案中為多個包貢獻內容。 
    包可以包含類、物件和特質,但是不能包含函式和變數的定義,這是java虛擬機器的侷限,但是包物件package object可以。
  2. 當引入包的幾個成員,使用選取器(selector) 
    import java.util.(HashMap => JavaHashMap) 
    import scala.collection.mutable._

二、習題答案

7.1 編寫示例程式,展示為什麼 
package com.horstmann.impatient 
不同於 
package com 
package horstmann 
package impatient

  1. package com{
  2. class T1(){}
  3. package horstmann{
  4. class T2(){}
  5. package impatient{
  6. class T3(){}
  7. }
  8. }
  9. }
  10. package com.horstmann.impatient{
  11. class T4(t1: T1, t2: T2)//not found T1 T2
  12. }

7.2 編寫一段讓你的Scala朋友們感到困惑的程式碼,使用一個不在頂部的com包

  1. package horstmann{
  2. class T1(){}
  3. package com{
  4. class T2(t: T1){}
  5. }
  6. package impatient{
  7. class aT3(t1: T1
    , t2: com.T2){}
  8. }
  9. }

7.3 編寫一個包random,加入函式nextInt():Int,nextDouble():Double,setSeed(seed:Int):Unit。生成隨機數的演算法採用線性同餘生成器

  1. packageobject random{
  2. var seed:Int= _
  3. val a =BigDecimal(1664525)
  4. val b =BigDecimal(1013904223)
  5. val n =32
  6. def nextInt():Int={
  7. val temp =(seed *a + b)%BigDecimal
    (2).pow(n)
  8. seed = temp.toInt
  9. seed
  10. }
  11. def nextDouble():Double={
  12. val temp =(seed *a + b)%BigDecimal(2).pow(n)
  13. seed = temp.toInt
  14. temp.toDouble
  15. }
  16. }
  17. import random._
  18. object test extendsApp{
  19. (1 to 10).foreach(x => println(nextInt()))
  20. (1 to 10).foreach(x => println(nextDouble()))
  21. }

7.4 在你看來Scala的設計者為什麼要提供package object語法而不是簡單的讓你將函式和變數新增到包中呢? 
因為JVM不支援包中包含函式和變數

7.5 private[com] def giveRaise(rate:Double)的含義是什麼?有用嗎?

除了com包可訪問giveRaise,其他包都不能訪問。有用。

7.6 編寫一段程式,將Java雜湊對映中的所有元素拷貝到Scala雜湊對映。用引入語句重新命名這兩個類。

  1. objectTransferextendsApp{
  2. import java.util.{HashMap=>JavaHashMap}
  3. import collection.mutable.{HashMap=>ScalaHashMap}
  4. val javaMap =newJavaHashMap[Int,String]
  5. javaMap.put(1,"One");
  6. javaMap.put(2,"Two");
  7. javaMap.put(3,"Three");
  8. javaMap.put(4,"Four");
  9. val scalaMap =newScalaHashMap[Int,String]
  10. for(key <- javaMap.keySet().toArray){
  11. scalaMap+=(key.asInstanceOf[Int]-> javaMap.get(key))
  12. }
  13. println(scalaMap.mkString(" "))
  14. }

7.7 在前一個練習中,將所有引入語句移動到儘可能小的作用域裡

  1. objectTransferextendsApp{
  2. import java.util.{HashMap=>JavaHashMap}
  3. val javaMap =newJavaHashMap[Int,String]
  4. javaMap.put(1,"One");
  5. javaMap.put(2,"Two");
  6. javaMap.put(3,"Three");
  7. javaMap.put(4,"Four");
  8. import collection.mutable.{HashMap=>ScalaHashMap}
  9. val scalaMap =newScalaHashMap[Int,String]
  10. for(key <- javaMap.keySet().toArray){
  11. scalaMap+=(key.asInstanceOf[Int]-> javaMap.get(key))
  12. }
  13. println(scalaMap.mkString(" "))
  14. }

7.8 以下程式碼的作用是什麼?這是個好主意嗎? 
import java. 
import javax.

匯入java和javax下的所有類。而java和javax下是沒有類的。所以此程式碼無用

7.9 編寫一段程式,引入java.lang.System類,從user.name系統屬性讀取使用者名稱,從Console物件讀取一個密碼,如果密碼不是”secret”,則在標準錯誤流中列印一個訊息;如果密碼是”secret”,則在標準輸出流中列印一個問候訊息。不要使用任何其他引入,也不要使用任何限定詞(帶句點的那種)

  1. import java.lang.System._
  2. object vertify extendsApp{
  3. var password =Console.readLine()
  4. if(password equals "secret")
  5. println("Hello "+ getProperty("user.name"))
  6. else
  7. println("password error!")
  8. }

7.10 除了StringBuilder,還有哪些java.lang的成員是被scala包覆蓋的?

直接比對java.lang下的類和scala包下的類即可。

相關推薦

scala 引入 讀書筆記習題答案程式碼

chapter 7 包和引入 標籤:快學scala 一、筆記 scala中的包名是相對的,原始檔的目錄與包之間沒有強制的關聯關係,完全可以在同一檔案中為多個包貢獻內容。  包可以包含類、物件和特質,但是不能包含函式和變數的定義,這是java虛擬機器的侷限,但是包物件

Scala習題解答— 引入

8 包和引入 8.1 編寫示例程式,展示為什麼 package com.horstmann.impatient 不同於 package com package horstmann packa

scala 讀書筆記習題答案程式碼

chapter 5 類 標籤:快學scala 一、筆記 scala類方法預設是公有的, classCounter{private val value =0def increment(){ value +=1}def current()= value}val = my

scala 讀書筆記習題答案程式碼

chapter 3 陣列相關操作 標籤:快學scala 一、筆記 scala的Array以java陣列方式實現,陣列在JVM中的型別為java.lang.String[]. scala>import scala.collection.mutable.Array

scala 特質 讀書筆記習題答案程式碼

chapter 10 特質 標籤:快學scala 一、筆記 scala和java一樣不允許從多個超類繼承,scala提供特質而非介面。特質可以同時擁有抽象方法和具體方法,而類可以實現多個特質。  不需要將方法宣告為abstract,特質中未

scala 十一 操作符 讀書筆記習題答案程式碼

標籤:快學scala 一、筆記 scala種可以在反引號中包含幾乎任何字元序列, val 'val'=42 所有的操作符都是左結合的,除了以冒號(:)結尾的操作符,和賦值操作符。用於構造列表的::操作符是又結合的。1::2::Ni1的意思是1::(2::Ni1),先創建出包含2

scala 讀書筆記習題答案程式碼

chapter 4 元組與對映 標籤:快學scala 一、筆記 預設Map為不可變對映,可變對映定義: scala> val scores = scala.collection.mutable.Map("Allic"->1,"Bob"->3,"Ci

Scala #4答案

數組 第三章 給定 arr val scala 一個 filter array 4.給定一個整數數組,產生一個新的數組,包含原數組中的所有正值,按原有順序排序 之後的元素是所有的零或者負值,按原有順序排序 scala> val arr = Array(1, 2, 3

Scala 習題答案

1.編寫一段程式碼,將a設定為一個n個隨機整數的陣列,要求隨機數介於0(包含)和n(不包含)之間。 val n = 100 //n是自己給定的 val a = scala.util.Random val b = new Array[Int](n) //

Scala習題答案

5.1 改進5.1節的Counter類,讓它不要在Int.MaxValue時變成負數。 class Counter{ private var value = Int.MaxValue def increment(){ if(va

Scala學習筆記

1、固定長度陣列Array,長度變化陣列ArrayBuffer,在陣列緩衝中尾端新增或移除元素是一個高效的操作。也可以在任意位置插入或移除元素,這樣操作不高效--所有在哪個位置的元素都必須被平移。2、for(...) yield 迴圈建立了一個型別與原始集合的相同的新集合。如

Scala13----集合

本章要點 所有集合都擴充套件自Iterable特質 集合有三大類:序列、集、對映 對於幾乎所有集合類,Scala都同時提供了可變的和不可變的版本 Scala列表要麼是空的,要麼擁有一頭一尾,其中尾部本身又是一個列表 集是無先後次序的集合 用Linkedhas

03 scala習題答案

\1. 編寫一段程式碼,將a設定為一個n個隨機整數的陣列,要求隨機數介於0和n之間。 1 2 3 4 5 6 7 8 9 10 11 12 objectApp { def main(args:

Scala 習題答案

1.設定一個對映,其中包含你想要的一些裝備,以及它們的價格。然後構建另一個對映,採用同一組鍵,但在價格上打9折。 val item = Map(("computer"->4500.0),("keyboard"->291.0)) val item

scala6習題——物件相關

1.編寫一個conversion物件,加入inchestoCentimeters,gallonstoliters,milestoKilometers方法 object Conversions{ def inchesToCentimeters()

Scala10----特質

本章要點 類可以實現任意數量的特質 特質可以要求實現它們的類具備特定的欄位、方法或超類 和Java介面不同,Scala特質可以提供方法和欄位的實現 當你將多個特質疊加在一起時,順序很重要—-其方法先被執行的特質排在更後面 為什麼沒有多重繼承 S

c++ primer(五版)學習筆記習題答案程式碼版(第一

筆記較為零散,都是自己不熟悉的知識點。 習題答案至於一個.cc中,需要執行某一題直接修改#define NUM**, 如執行第一題為#define NUM11,題1.24定義為NUM124chapter 1 1、std::cout << "Entertwo nu

Scala 九課 (伴生對象枚舉)

over objectc yellow str imp 擴展類 new 伴生對象 ray Scala沒有靜態方法和靜態字段, 你可以用object這個語法結構來達到同樣的目的。 對象的構造器只有在第一次被使用時才調用。 伴生對象apply方法: 類和它的伴生對象可以互相訪問

scala十六習題——XML處理

本章主要講解對XML的處理,要處理xml需要引入scala-xml-x.x.x.x.jar包,建立普通scala 類不會自動新增此jar包,需要手動引入之後就可以使用了 1.(0)得到什麼,(0)(0)又得到什麼,為什麼? 仍然為<fred/>

Scala 六課 (類構造函數)

ora per 如果 輔助 text log ring nbsp string 類 主構造器: class Person (var name: String){ } 主構造參數可以不帶val或者var,如果沒有被其他方法使用,則不保存為字段。 如果被其他方法