快學scala 第七章 包和引入 讀書筆記及習題答案程式碼
chapter 7 包和引入
標籤:快學scala
一、筆記
- scala中的包名是相對的,原始檔的目錄與包之間沒有強制的關聯關係,完全可以在同一檔案中為多個包貢獻內容。
包可以包含類、物件和特質,但是不能包含函式和變數的定義,這是java虛擬機器的侷限,但是包物件package object可以。 - 當引入包的幾個成員,使用選取器(selector)
import java.util.(HashMap => JavaHashMap)
import scala.collection.mutable._
二、習題答案
7.1 編寫示例程式,展示為什麼
package com.horstmann.impatient
不同於
package com
package horstmann
package impatient
package com{
class T1(){}
package horstmann{
class T2(){}
package impatient{
class T3(){}
}
}
}
package com.horstmann.impatient{
class T4(t1: T1, t2: T2)//not found T1 T2
}
7.2 編寫一段讓你的Scala朋友們感到困惑的程式碼,使用一個不在頂部的com包
package horstmann{
class T1(){}
package com{
class T2(t: T1){}
}
package impatient{
class aT3(t1: T1
}
}
7.3 編寫一個包random,加入函式nextInt():Int,nextDouble():Double,setSeed(seed:Int):Unit。生成隨機數的演算法採用線性同餘生成器
packageobject random{
var seed:Int= _
val a =BigDecimal(1664525)
val b =BigDecimal(1013904223)
val n =32
def nextInt():Int={
val temp =(seed *a + b)%BigDecimal
seed = temp.toInt
seed
}
def nextDouble():Double={
val temp =(seed *a + b)%BigDecimal(2).pow(n)
seed = temp.toInt
temp.toDouble
}
}
import random._
object test extendsApp{
(1 to 10).foreach(x => println(nextInt()))
(1 to 10).foreach(x => println(nextDouble()))
}
7.4 在你看來Scala的設計者為什麼要提供package object語法而不是簡單的讓你將函式和變數新增到包中呢?
因為JVM不支援包中包含函式和變數
7.5 private[com] def giveRaise(rate:Double)的含義是什麼?有用嗎?
除了com包可訪問giveRaise,其他包都不能訪問。有用。
7.6 編寫一段程式,將Java雜湊對映中的所有元素拷貝到Scala雜湊對映。用引入語句重新命名這兩個類。
objectTransferextendsApp{
import java.util.{HashMap=>JavaHashMap}
import collection.mutable.{HashMap=>ScalaHashMap}
val javaMap =newJavaHashMap[Int,String]
javaMap.put(1,"One");
javaMap.put(2,"Two");
javaMap.put(3,"Three");
javaMap.put(4,"Four");
val scalaMap =newScalaHashMap[Int,String]
for(key <- javaMap.keySet().toArray){
scalaMap+=(key.asInstanceOf[Int]-> javaMap.get(key))
}
println(scalaMap.mkString(" "))
}
7.7 在前一個練習中,將所有引入語句移動到儘可能小的作用域裡
objectTransferextendsApp{
import java.util.{HashMap=>JavaHashMap}
val javaMap =newJavaHashMap[Int,String]
javaMap.put(1,"One");
javaMap.put(2,"Two");
javaMap.put(3,"Three");
javaMap.put(4,"Four");
import collection.mutable.{HashMap=>ScalaHashMap}
val scalaMap =newScalaHashMap[Int,String]
for(key <- javaMap.keySet().toArray){
scalaMap+=(key.asInstanceOf[Int]-> javaMap.get(key))
}
println(scalaMap.mkString(" "))
}
7.8 以下程式碼的作用是什麼?這是個好主意嗎?
import java.
import javax.
匯入java和javax下的所有類。而java和javax下是沒有類的。所以此程式碼無用
7.9 編寫一段程式,引入java.lang.System類,從user.name系統屬性讀取使用者名稱,從Console物件讀取一個密碼,如果密碼不是”secret”,則在標準錯誤流中列印一個訊息;如果密碼是”secret”,則在標準輸出流中列印一個問候訊息。不要使用任何其他引入,也不要使用任何限定詞(帶句點的那種)
import java.lang.System._
object vertify extendsApp{
var password =Console.readLine()
if(password equals "secret")
println("Hello "+ getProperty("user.name"))
else
println("password error!")
}
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 迴圈建立了一個型別與原始集合的相同的新集合。如
快學Scala第13章----集合
本章要點 所有集合都擴充套件自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
快學scala第6章習題——物件相關
1.編寫一個conversion物件,加入inchestoCentimeters,gallonstoliters,milestoKilometers方法 object Conversions{ def inchesToCentimeters()
快學Scala第10章----特質
本章要點 類可以實現任意數量的特質 特質可以要求實現它們的類具備特定的欄位、方法或超類 和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,如果沒有被其他方法使用,則不保存為字段。 如果被其他方法