您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“Scala標識符,命名和域怎么理解 ”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Scala標識符,命名和域怎么理解 ”吧!
在Scala中,命名用來表示類型,值,方法以及類,這些統(tǒng)稱為實體。命名在局部定義與聲明,繼承,import子句,package子句中存在,這些可以統(tǒng)稱為綁定。
綁定有優(yōu)先級,定義(局部或繼承)有最高的優(yōu)先級,然后是顯式import,然后是通配符import,然后是包成員,是最低的優(yōu)先級。
有兩種不同的命名空間,一個是類型,一個是術語。同樣的命名可以表示類型或術語,這要看命名應用所在的上下文。
綁定有一個域,在此域中用單一命名定義的實體可以用一個簡單名稱來訪問。域可以嵌套。內(nèi)部域中的綁定將會遮蓋同一域中低優(yōu)先級的綁定,或者外部域中低優(yōu)先級或同優(yōu)先級的綁定。
注意遮蓋只是偏序關系。在下面情況中:
val x = 1;
{ import p.x;
x}
x的綁定并沒有互相遮蓋。因此第三行中對x的引用的含義將是不明確的。
對一個未限定的(類型或術語)標識符x的引用在以下條件下可以被單一綁定:
l 在同一命名空間中用命名x定義一個實體作為標識符
l 在此命名空間中遮蓋所有的其他定義命名x的實體綁定
如果沒有這樣的綁定將會導致錯誤。如果x由一個import子句綁定,那么簡單命名x將等價于由import子句映射所限定的命名。如果x由一個定義或聲明綁定,那么x將指代由該綁定引入的實體。在此情況下,x的類型即是引用的實體的類型。
示例2.0.2 以下是包P和Q中兩個名為X的對象的定義:
package P {
object X { val x = 1; val y = 2 }
}
package Q {
object X { val x = true; val y = “” }
}
以下程序示意了它們間不同的綁定及優(yōu)先級。
package P { //?X?由package子句綁定
import Console._ //?println?由通配符import綁定
object A {
println(“L4: “+X) //這里的?X?指?P.X?
object B {
import Q._{ //?X?由通配符import綁定
println(“L7: “+X) //這里的?X?指?Q.X?
import X._ //?x?和?y?由通配符import綁定
println(“L8: “+x) //這里的?x?指?Q.X.x?
object C {
val x = 3 //?x?由局部定義綁定
println(“L12: “+x) //這里的?x?指常數(shù)?3?
{ import Q.X._ //?x?和?y?由通配符import綁定
// println(“L14: “+x) //這里到?x?的引用指代不明確
import X.y //?y?由顯式import綁定
println(“L16: “+y) //這里的?y?指?Q.X.y?
{ val x = “abc” //?x?由局部定義綁定
import P.X._ //?x?和?y?由通配符import綁定
// println(“L19: “+y) //這里到?y?的引用指代不明確
println(“L20: “+x) //這里的?x?指字符串”abc”
}}}}}}
一個到限定的(類型或術語)標識符e.x的引用指在同一個命名空間中e的類型T的一個名為x的成員作為標識符。如果T不是值類型將會導致錯誤。e.x的類型就是引用的實體T的成員的類型。
到此,相信大家對“Scala標識符,命名和域怎么理解 ”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關內(nèi)容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。