成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Scala的四種標識符構成方式

開發 后端
本文節選自Martin Odersky,Lex Spoon和Bill Venners所著,Regular翻譯的《Programming in Scala》的第六章。Scala是一種針對 JVM 將函數和面向對象技術組合在一起的編程語言。

現在你已經看到了Scala里兩種構成標識符的方式:字母數字式和操作符。Scala在構成標識符方面有非常靈活的規則。除了這兩種之外你會看到還有其它的兩種。本節將說明所有的這四種標識符構成方式。

51CTO編輯推薦:Scala編程語言專題

字母數字標識符:alphanumeric identifier起始于一個字母或下劃線,之后可以跟字母,數字,或下劃線。‘$’字符也被當作是字母,但是被保留作為Scala編譯器產生的標識符之用。用戶程序里的標識符不應該包含‘$’字符,盡管能夠編譯通過;但是這樣做有可能導致與Scala編譯器產生的標識符發生名稱沖撞。

Scala遵循Java的駝峰式這種風格被稱為駝峰式:camel case,因為標識符由一個個首字母大寫的內嵌單詞組成。標識符習俗,例如toString和HashSet。盡管下劃線在標識符內是合法的,但在Scala程序里并不常用,部分原因是為了保持與Java一致,同樣也由于下劃線在Scala代碼里有許多其它非標識符用法。因此,***避免使用像to_string,__init__,或name_這樣的標識符。字段,方法參數,本地變量,還有函數的駝峰式名稱,應該以小寫字母開始,如:length,flatMap,還有s。類和特質的駝峰式名稱應該以大寫字母開始,如:BigInt,List,還有UnbalancedTreeMap。

注意

標識符結尾使用下劃線的一個結果就是,比如說,如果你嘗試寫一個這樣的定義,“val name_: Int = 1”,你會收到一個編譯器錯誤。編譯器會認為你正常是定義一個叫做“name_:”的變量。要讓它編譯通過,你將需要在冒號之前插入一個額外的空格,如:“val name_ : Int = 1”。

Scala與Java的習慣不一致的地方在于常量名。Scala里,constant這個詞并不等同于val。盡管val在被初始化之后的確保持不變,但它還是個變量。比方說,方法參數是val,但是每次方法被調用的時候這些val都可以代表不同的值。而常量更持久。比方說,scala.Math.Pi被定義為很接近實數的雙精度值,表示圓周和它的直徑的比值。這個值不太可能改變,因此Pi顯然是個常量。你還可以用常數去給一些你代碼里作為幻數:magic number要用到的值一個名字:文本值不具備解釋能力,如果出現在多個地方將會變得極度糟糕。你還可能會需要定義用在模式匹配里的常量,用例將在15.2節中說明。Java里,習慣上常量名全都是大寫的,用下劃線分隔單詞,如MAX_VALUE或PI。Scala里,習慣只是***個字母必須大寫。因此,Java風格的常量名,如X_OFFSET,在Scala里也可以用,但是Scala的慣例是常數也用駝峰式風格,如XOffset。

操作符標識符:operator identifier由一個或多個操作符字符組成。操作符字符是一些如+,:,?,~或#的可打印的ASCII字符。更精確地說,操作符字符屬于數學符號(Sm)或其他符號(So)的Unicode集,或不是字母,數字,括號,方括號,大括號,單或雙引號,或下劃線,句號,分號,冒號,回退字符的7位ASCII字符。以下是一些操作符標識符的例子:

+     ++     :::     < ?>     :->

Scala編譯器將內部“粉碎”操作符標識符以轉換成合法的內嵌‘$’的Java標識符。例如,標識符:->將被內部表達為$colon$minus$greater。若你想從Java代碼訪問這個標識符,就應使用這個內部表達。

Scala里的操作符標識符可以變得任意長,因此在Java和Scala間有一些小差別。Java里,輸入x< -y將會被拆分成四個詞匯符號,所以寫成x <  - y也沒什么不同。Scala里,< -將被作為一個標識符拆分,而得到x < - y。如果你想要得到***種解釋,你要在‘< ’和‘-’字符間加一個空格。這大概不會是實際應用中的問題,因為沒什么人會在Java里寫x< -y的時候不注意加空格或括號的。

混合標識符:mixed identifier由字母數字組成,后面跟著下劃線和一個操作符標識符。例如,unary_+被用做定義一元的‘+’操作符的方法名。或者,myvar_=被用做定義賦值操作符的方法名。多說一句,混合標識符格式myvar_=是由Scala編譯器產生的用來支持屬性:property的;第十八章進一步說明。

文本標識符:literal identifier是用反引號`...`包括的任意字串。如:

`x`     `< clinit>`     `yield`

它的思路是你可以把任何運行時認可的字串放在反引號之間當作標識符。結果總是Scala標識符。即使包含在反引號間的名稱是Scala保留字,這個規則也是有效的。在Java的Thread類中訪問靜態的yield方法是其典型的用例。你不能寫Thread.yield()因為yield是Scala的保留字。然而,你仍可以在反引號里引用方法的名稱,例如Thread.`yield`()。

【相關閱讀】

  1. Scala的私有字段和定義操作符
  2. Scala的從構造器:主構造器之外的構造器
  3. 在Scala中檢查先決條件、添加字段和自指向
  4. Scala Rational對象的toString方法
  5. 學習Scala中的Rational類:分數的模型化

責任編輯:book05 來源: Artima
相關推薦

2022-07-17 06:57:02

時間戳唯一標識符

2020-06-12 08:28:29

JavaScript開發技術

2013-06-14 15:24:57

Android開發移動開發數據存儲方式

2023-05-22 08:03:28

JavaScrip枚舉定義

2022-03-25 14:47:24

Javascript數據類型開發

2010-07-28 13:54:42

Flex數據綁定

2017-04-17 19:31:03

Android多線程

2009-09-23 10:41:10

對象標識符Hibernate

2013-10-17 09:25:52

2014-12-25 09:41:15

Android加載方式

2021-12-22 09:34:01

Golagn配置方式

2021-06-25 08:00:00

物聯網醫療技術

2015-09-06 09:23:23

Android異步更新

2011-05-20 09:55:26

Oracle連接

2025-01-20 15:50:19

2024-03-20 15:33:12

2022-10-27 14:18:13

Flowable流程變量

2021-07-14 10:31:15

JavaScript開發 技巧

2021-12-01 15:40:40

節日開源剪貼畫

2015-04-02 16:54:52

災難恢復VDI災難恢復
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产成人jvid在线播放 | 91高清视频在线观看 | 亚洲黄色av网站 | 蜜桃视频成人 | www国产成人免费观看视频 | 日本不卡免费新一二三区 | 久草网址| 欧美日韩中文国产一区发布 | 一区二区三区精品 | 日本一区二区不卡 | 久久不卡 | 国产精品欧美一区二区三区不卡 | 特级黄一级播放 | 中文字幕蜜臀av | 国产精品久久久久久婷婷天堂 | 欧美激情区 | 国产成人精品免费视频大全最热 | 国产成人精品一区二区三区视频 | 久久免费高清 | 久久综合伊人一区二区三 | 夜夜撸av| 污污免费网站 | 久久国产精品免费一区二区三区 | 成人欧美一区二区三区黑人孕妇 | 久久精品青青大伊人av | 欧美成人高清视频 | 国产精品视频一区二区三区 | 国产精品一区二区在线 | 久久99精品久久久久久琪琪 | 国产传媒毛片精品视频第一次 | 黑人巨大精品欧美一区二区一视频 | 99久久亚洲 | a成人| 亚洲欧洲精品成人久久奇米网 | 91精品国产乱码久久久久久久久 | 久久久久国产一区二区三区四区 | 91av视频| 黄a网 | 天堂亚洲网 | 久久久无码精品亚洲日韩按摩 | 成人深夜福利 |