Scala 基礎語法

来源:https://www.cnblogs.com/YuanWeiBlogger/archive/2019/08/26/11415361.html
-Advertisement-
Play Games

Scala解釋器的使用 ·REPL:Read(取值)-> Evaluation(求值)-> Print(列印)-> Loop(迴圈)。scala解釋器也被稱為REPL,會快速編譯scala代碼為位元組碼,然後交給JVM來執行。 ·計算表達式:在scala>命令行內,鍵入scala代碼,解釋器會直接返回 ...


Scala解釋器的使用

 

·REPLRead(取值)-> Evaluation(求值)-> Print(列印)-> Loop(迴圈)。scala解釋器也被稱為REPL,會快速編譯scala代碼為位元組碼,然後交給JVM來執行。

 

·計算表達式:在scala>命令行內,鍵入scala代碼,解釋器會直接返回結果給你。如果你沒有指定變數來存放這個值,那麼值預設的名稱為res,而且會顯示結果的數據類型,比如IntDoubleString等等。

 

·例如,輸入1 + 1,會看到res0: Int = 2

 

·內置變數:在後面可以繼續使用res這個變數,以及它存放的值。

 

·例如,2.0 * res0,返回res1: Double = 4.0

 

·例如,"Hi, " + res0,返回res2: String = Hi, 2

 

·自動補全:在scala>命令行內,可以使用Tab鍵進行自動補全。

 

·例如,輸入res2.to,敲擊Tab鍵,解釋器會顯示出以下選項,toCharArraytoLowerCasetoStringtoUpperCase。因為此時無法判定你需要補全的是哪一個,因此會提供給你所有的選項。

 

·例如,輸入res2.toU,敲擊Tab鍵,直接會給你補全為res2.toUpperCase

 

 

Scala聲明變數

 val 代表常量
  val a=100;
 var 代表變數
  var a=100;

 

·聲明val變數:可以聲明val變數來存放表達式的計算結果。

·例如,val result = 1 + 1

·後續這些常量是可以繼續使用的,例如,2 * result

·但是常量聲明後,是無法改變它的值的,例如,result = 1,會返回error: reassignment to val的錯誤信息。

·聲明var變數:如果要聲明值可以改變的引用,可以使用var變數。

·例如,val myresult = 1myresult = 2

·但是在scala程式中,通常建議使用val,也就是常量,因此比如類似於spark的大型複雜系統中,需要大量的網路傳輸數據,如果使用var,可能會擔心值被錯誤的更改。

·在Java的大型複雜系統的設計和開發中,也使用了類似的特性,我們通常會將傳遞給其他模塊 / 組件 / 服務的對象,設計成不可變類(Immutable Class)。在裡面也會使用java的常量定義,比如final,阻止變數的值被改變。從而提高系統的健壯性(robust,魯棒性),和安全性。

·指定類型:無論聲明val變數,還是聲明var變數,都可以手動指定其類型,如果不指定的話,scala會自動根據值,進行類型的推斷。

·例如,val name: String = null

·例如,val name: Any = "leo"

·聲明多個變數:可以將多個變數放在一起進行聲明。

·例如,val name1, name2:String = null

·例如,val num1, num2 = 100

 

 

 

Scala數據類型與操作符

·基本數據類型:ByteCharShortIntLongFloatDoubleBoolean

 

·乍一看與Java的基本數據類型的包裝類型相同,但是scala沒有基本數據類型與包裝類型的概念,統一都是類。scala自己會負責基本數據類型和引用類型的轉換操作。

 

·使用以上類型,直接就可以調用大量的函數,例如,1.toString()1.to(10)

 

·類型的加強版類型:scala使用很多加強類給數據類型增加了上百種增強的功能或函數。

 

·例如,String類通過StringOps類增強了大量的函數,"Hello".intersect(" World")

 

·例如,Scala還提供了RichIntRichDoubleRichChar等類型,RichInt就提供了to函數,1.to(10),此處Int先隱式轉換為RichInt,然後再調用其to函數

 

·基本操作符:scala的算術操作符與java的算術操作符也沒有什麼區別,比如+-*/%等,以及&|^>><<等。

 

·但是,在scala中,這些操作符其實是數據類型的函數,比如1 + 1,可以寫做1.+(1)

 

·例如,1.to(10),又可以寫做1 to 10

 

·scala中沒有提供++--操作符,我們只能使用+-,比如counter = 1counter++是錯誤的,必須寫做counter += 1.

 

 

Scala 函數調用與apply()函數

·函數調用方式:在scala中,函數調用也很簡單。

·例如,import scala.math._sqrt(2)pow(2, 4)min(3, Pi)

·不同的一點是,如果調用函數時,不需要傳遞參數,則scala允許調用函數時省略括弧的,例如,"Hello World".distinct

 

·apply函數

·Scala中的apply函數是非常特殊的一種函數,在Scalaobject中,可以聲明apply函數。而使用“類名()”的形式,其實就是“類名.apply()”的一種縮寫。通常使用這種方式來構造類的對象,而不是使用“new 類名()”的方式。

·例如,"Hello World"(6),因為在StringOps類中有def apply(n: Int): Char的函數定義,所以"Hello World"(6),實際上是"Hello World".apply(6)的縮寫。

·例如,Array(1, 2, 3, 4),實際上是用Array objectapply()函數來創建Array類的實例,也就是一個數組。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 基於鎖和線程的併發模型是目前最常用的一種併發模型,但是併發編程模型不僅僅只有這一種,瞭解和熟悉各種併發編程模型,在解決併發問題時會有更多思路。” ...
  • [TOC] Java實現發郵件功能 前言 電子郵件的應用場景非常廣泛,例如新用戶加入,即時發送優惠清單、通過郵件找回密碼、監聽後臺程式,出現異常自動郵件通知等。 本文以網易郵箱為例,通過Java代碼實現發送郵件功能。 開發環境 請參照: "基於SpringBoot構建分模塊項目" 代碼 1. pom ...
  • 轉載註明:https://blog.csdn.net/WantFlyDaCheng/article/details/100078782 一、框架是重點,但別讓人感覺你只會山寨別人的代碼 二、別單純看單機版的框架,適當瞭解些分散式 三、資料庫方面,別就知道增刪改查,得瞭解性能優化 四、Java核心方面 ...
  • 轉載註明:https://blog.csdn.net/WantFlyDaCheng/article/details/100078777 自動代碼 查詢快捷鍵 其他快捷鍵 調試快捷鍵 重構 十大Intellij IDEA快捷鍵 1 智能提示 2 重構 3 代碼生成 4 編輯 5 查找打開 6 其他輔助 ...
  • 單例定義: 一個類只有一個實例,並提供一個全局訪問點。 巧妙利用了編程語言的一些語法規則:構造函數private, 然後提供一個public的方法返回類的一個實例;又方法和返回的類的實例都是static類型,所以只能被類所擁有,而不能被實例化類的對象擁有。這樣一個類就只能有一個實例了。 2. 加”s ...
  • 函數的定義與調用 在Scala中定義函數時,需要定義函數的函數名、參數、函數體。 我們的第一個函數如下所示: def sayHello(name: String, age: Int) = { if (age > 18) { printf("hi %s, you are a big boy\n", n ...
  • JavaFX的對話框主要分為提示對話框和文件對話框兩類,其中提示對話框又分作消息對話框、警告對話框、錯誤對話框、確認對話框四種。這四種對話框都使用Alert控制項表達,並通過對話框類型加以區分,例如AlertType.INFORMATION表示消息對話框,AlertType.WARNIN表示警告對話框 ...
  • 攔截器配置類使用繼承寫法導致jackson的全局配置失效,採用配置類實現WebMvcConfigurer介面解決問題 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...