Scala基礎應用(8) 約束

2021-07-29 09:29:34 字數 912 閱讀 7954

視界與上界很類似,只是加入了隱式轉換的支援

def test [a <% b](param1: string, param2: int ...): 返回型別 = ...

等價於def test [a] (param1: string, param2: int ...)(implicit viewab: a => b) : 返回型別 = ...

也等價於

implicit def viewab(a: a) : b = ...

def test [a] (param1: string, param2: int ...): 返回型別 = ...

類的視界

class

a[t<% int]

trait不支援視界

進一步對型別引數化的class或trait進行約束

如下宣告方式為型別引數化的class或trait

case class foo[a](引數列表) //這裡a即為foo類的引數化型別
case class foo[a](a:a) 

foo("test string").getlen // 返回11

foo(123).getlen // 報錯

下面通過隱式轉換也會報錯

import scala.language.implicitconversions

implicit def int2string(n: int) = n.tostring

foo(123).getlen //報錯

Scala基礎語法8 抽象類

在scala中,使用abstract修飾的類稱為抽象類,在抽象類中可以定義屬性 未實現的方法和具體實現的方法。package day03 abstract class absclass package day03 在scala中第乙個繼承抽象類或者特質,只能使用關鍵字extends 如果想繼承多個特...

Scala基礎應用(9) 隱式轉換

首先要明確隱式轉換只針對型別,與名稱無關,我把隱式型別分為以下三類 注意 隱式轉換只發生在執行時當前上下文沒有對應的呼叫。同時,隱式轉換有如下限制 下面為大家一一講解 也可稱為隱式值,即為隱式引數賦值 implicit val myname mark zhou def whoami implicit...

Scala應用函式

我們使用 來代替單個的引數,實際上你也可以使用 來代替整個引數列表,比如說,你可以使用 print 來代替 println somenumbers.foreach println scala編譯器自動將上面 解釋成 somenumbers.foreach x println x scala def ...