scala學習手記9 - =和==

来源:http://www.cnblogs.com/amunote/archive/2016/06/11/5576192.html
-Advertisement-
Play Games

= 賦值運算 scala的賦值運算和java的有著很大的不同。如a=b這樣的賦值運算,在Java中返回值是a的值,在scala中返回的則是Unit。Unit是值類型,全局只存在唯一的值,即(),通常Unit只用來聲明函數或方法的返回值,其他場景基本是沒有意義的。這樣就很容易導致一些錯誤地使用,比如a... ...


= 賦值運算

scala的賦值運算和java的有著很大的不同。如a=b這樣的賦值運算,在Java中返回值是a的值,在scala中返回的則是Unit。Unit是值類型,全局只存在唯一的值,即(),通常Unit只用來聲明函數或方法的返回值,其他場景基本是沒有意義的。這樣就很容易導致一些錯誤地使用,比如a=b=c這樣的賦值運算在java中是絕對可以的,但是在scala中運行就會報錯。看一段代碼:

var a, b, c = 1
a =  b=c
println(a)

上面這段代碼還沒有執行就在IDE中報錯了,勉強執行下看看會報什麼錯:

image

報了類型不匹配的錯誤,因為在第一行代碼中scala推斷a是一個Int型的變數,後又將b=c的運算結果——一個Unit值——賦值給它,那當然會報錯了。

即使只在scala中看賦值運算符“=”號也是一個比較奇怪的東西:它不是一個方法,在預設情況下不可以這樣使用——a.=(1)。對於這一點暫時無法深入探究,以後有時間慢慢再看。

==運算

在java中,對於基本類型和引用類型的==運算有著不同的計算方式:

  • 對於基本類型來說,==運算比較的就是兩邊表達式的值;
  • 對於引用類型來說,==運算比較的是兩邊對象的引用而非是對象的值;在Java中比較對象的值使用的是equals方法。

在scala中沒有對象,那麼不論類型如何,==的運算都是面向值的。這一點由scala的Any類(scala中所有的類都是由它派生而來)提供了保證:它將==()方法實現為final的方法。因此在scala中進行值的比較就可以簡單使用==運算,如果還有一些特殊化的比較,就需要改寫equals方法了。如果想執行對於引用的比較可以使用eq()方法。看一下下麵這段程式:

val str1 = "hello"
val str2 = "hello"
val str3 = new String("hello")

println(str1 == str2) // Equivalent to Java's str1.equals(str2)
println(str1 eq str2) // Equivalent to Java's str1 == str2
println(str1 == str3)
println(str1 eq str3)

程式的執行結果:

image

結果很清楚了。

---------------------------------------------------

今天學了scala的=和==,這兩個運算和Java中對應符號的運算有著明顯的不同,以後需要註意下。

#########


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

-Advertisement-
Play Games
更多相關文章
  • Python備份目錄及目錄下的全部內容 本來是想寫一個東西可以直接調用TortoiseSVN保存當前代碼到一個分枝下的。 可惜調用SVN的部分還在研究。就先寫了目錄拷貝的部分。 如果有喜歡研究Python的童鞋願意提供想法或者建議的話, 這裡先謝謝了。 :) 就目錄拷貝的部分,思想很簡單。讀配置文件 ...
  • 1、定義字元串 在PHP中,字元串的定義可以使用單引號,也可以使用雙引號。但是必須使用同一種單或雙引號來定義字元串,如:‘Hello"和“Hello'為非法的字元串定義。 定義字元串時,只有一種引號被視為定義符,即單引號或雙引號。於是,如果一個字元串由雙引號開始,那麼只有雙引號被分析器解析。這樣,你 ...
  • 1.Java數據類型 在介紹Java的自動裝箱和拆箱之前,我們先來瞭解一下Java的基本數據類型。 在Java中,數據類型可以分為兩大種,Primitive Type(基本類型)和Reference Type(引用類型)。基本類型的數值不是對象,不能調用對象的toString()、hashCode( ...
  • 本來想搞明白點wchar_t,就寫了個很簡單的wcout的例子,結果中文無法輸出,然後換成wprintf,卻還是不行~於是在網上搜啊搜,總算解決了問題,總結一下: 試著運行下麵的代碼: wchar_t *ws = L"你好"; wcout << ws << endl; 這樣沒有任何輸出,必須將loc ...
  • imagecreatetruecolor()建立的是一幅大小為 x和 y的黑色圖像(預設為黑色[即便叫法就是真彩色圖像]),如想改變背景顏色則需要用填充顏色函數 imagefill($img,0,0,$color); imagecreate 新建一個空白圖像資源,用imagecolorAlloca... ...
  • 摘要 在上一篇博客《STL空間配置器那點事》簡單介紹了空間配置器的基本實現 兩級空間配置器處理,一級相關細節問題,同時簡單描述了STL各組件之間的關係以及設計到的設計模式等。 在最後,又關於STL空間配置的效率以及空間釋放時機做了簡單的探討。 線程安全問題概述 為什麼會有線程安全問題? 認真學過操作 ...
  • 安裝pip 代碼如下:# wget "https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5=834b2904f92d46aaa333267fb1c922bb" --no-check-certificate# tar -x ...
  • 看到有好幾個同事都有博客,工作了幾年我居然沒弄過博客,從今天開始,有空試著寫一些技術總結,跟大家分享,歡迎拍磚,共同學習。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...