溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Scala標識符,命名和域怎么理解

發(fā)布時間:2021-12-08 15:38:32 來源:億速云 閱讀:101 作者:iii 欄目:云計算

本篇內(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ù)學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI