Scala 函數

scala定義函數的標準格式為:
def 函數名(參數名1: 參數類型1, 參數名2: 參數類型2) : 返回類型 = {函數體}

函數示例1:返回Unit類型的函數

def shout1(content: String) : Unit = {println(content)
}

函數示例2:返回Unit類型的函數,但是沒有顯式指定返回類型。(當然也可以返回非Unit類型的值)

def shout2(content: String) = {println(content)
}

函數示例3:返回值類型有多種可能,此時也可以省略Unit

def shout3(content: String) = {if(content.length >= 3)content + "喵喵喵~"else3
}

函數示例4:帶有默認值參數的函數,調用該函數時,可以只給無默認值的參數傳遞值,也可以都傳遞,新值會覆蓋默認值;傳遞參數時如果不按照定義順序,則可以通過參數名來指定。

def shout4(content: String, leg: Int = 4) = {println(content + "," + leg)
}

函數示例5:變長參數(不確定個數參數,類似Java的…)

def sum(args: Int*) = {var result = 0for(arg <- args)result += argresult
}

遞歸函數:遞歸函數在使用時必須有明確的返回值類型

def factorial(n: Int): Int = {if(n <= 0)1elsen * factorial(n - 1)
}

注意
1、Scala可以通過=右邊的表達式 推斷出函數的返回類型。如果函數體需要多個表達式,可以用代碼塊{}。
2、可以把return 當做 函數版本的break語句。
3、遞歸函數一定要指定返回類型。
4、變長參數通過*來指定,所有參數會轉化為一個seq序列。

過程

我們將函數的返回類型為Unit的函數稱之為過程。

定義過程示例1:

def shout1(content: String) : Unit = {println(content)
}

定義過程示例2:

def shout1(content: String) = {println(content)
}

注意:這只是一個邏輯上的細分,如果因為該概念導致了理解上的混淆,可以暫時直接跳過過程這樣的描述。畢竟過程,在某種意義上也是函數。

懶值

當val被聲明為lazy時,他的初始化將被推遲,直到我們首次對此取值,適用于初始化開銷較大的場景。

lazy示例:通過lazy關鍵字的使用與否,來觀察執行過程

object Lazy {def init(): String = {println("init方法執行")"嘿嘿嘿,我來了~"}def main(args: Array[String]): Unit = {lazy val msg = init()println("lazy方法沒有執行")println(msg)}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535663.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535663.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535663.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ubuntu7.10中的apache的一些設置

在/etc/apache2/mods-available目錄下是apache2可用的模塊.出現在這里的模塊不代表你可以用.只是表明你的apache2已經安裝了這些模塊.可用的模塊在/etc/apache2/mods-enabled這個目錄下.(從redhat系列轉過來看ubuntu,雖然感覺不習慣,但覺得ubuntu的這種分目錄的方法很不錯.) 如…

Java并發篇_Java內存模型

在并發編程中&#xff0c;我們通常會遇到以下三個問題&#xff1a;原子性問題&#xff0c;可見性問題&#xff0c;有序性問題。那么它們產生的原因和在Java中解決的辦法又是什么呢&#xff1f; 一、內存模型的相關概念 ? 計算機在執行程序時&#xff0c;每條指令都是在CPU中執…

rz的安裝

以前,在redhat系列的linux中,通過終端工具操作服務器,經常使用rz來上傳小文件.但是有些系統默認情況下不能使用此命令.今天通過ubuntu.看到這條命令.即使ubunt沒有裝這個命令,你輸入此命令時,它會提示你進行安裝. rootubuntu:~# rzThe program rz is currently not installed. …

Java并發篇_synchronized

synchronized是Java語言的關鍵字&#xff0c;當它用來修飾一個方法或者一個代碼塊的時候&#xff0c;能夠保證在同一時刻最多只有一個線程執行該段代碼。本文給大家介紹java中的用法。 一、為什么要使用synchronized 在并發編程中存在線程安全問題&#xff0c;主要原因有&…

mysqlreport的學習

mysqlreport是一個腳本. 需要先安裝perl-DBI和perl-DBD-MySQL這2個包 mysqlreport 使用DBI 需要有http://hackmysql.com/mysqlreportdocperl ./mysqlreport --help 看幫助 perl ./mysqlreport --user root --password 密碼mysqlreport 文檔mysqlreport 以很友好的方式顯示 My…

Java并發篇_volatile

volatile是Java提供的一種輕量級的同步機制。Java 語言包含兩種內在的同步機制&#xff1a;同步塊&#xff08;或方法&#xff09;和 volatile 變量&#xff0c;相比于synchronized&#xff08;synchronized通常稱為重量級鎖&#xff09;&#xff0c;volatile更輕量級&#xff…

vi 語法著色

我所在部門的經理極其鄙視我用vi,這到不是說他看不慣vi,而是因為那句話"只有黑客級的人才用VI".而我只是一只小小萊鳥.所以只好被他們鄙視了. 現在說一說vi 著色的問題. 首先安裝 vim-enhanced &#xff0c; # yum -y install vim-enhanced 然后&#xff0c; # vi ~/…

Docker Dockerfile詳解

一、什么是Dockerfile Dockerfile是一個包含用于組合映像的命令的文本文檔。可以使用在命令行中調用任何命令。 Docker通過讀取Dockerfile中的指令自動生成映像。 docker build命令用于從Dockerfile構建映像。可以在docker build命令中使用-f標志指向文件系統中任何位置的Doc…

公司臺灣主站的url重寫

今天對公司臺灣主站的url地址進行優化.主站采用的是joomla,而joomla初建好后用的url對搜索引擎非常的不友好. Joomla中的SEF說白了就是一個對URL的重寫的過程將原來參數眾多&#xff0c;層次很深的URL改寫為一個簡單的更容易被記住被搜索的URL。通過分析Joomla站點的URL結果就…

編寫第一個Spring程序——IOC實現

第一個Spring程序 IOC范例 1、新建maven工程 2、在pom.xml文件中導入相關jar包 <!-- https://mvnrepository.com/artifact/org.springframework/spring-core --><dependency><groupId>org.springframework</groupId><artifactId>spring-core&l…

改變centos系統的時區

兩條命令都可以: 1.timeconfig 2.tzselect

分布式文件系統:原理、問題與方法

本地文件系統如ext3&#xff0c;reiserfs等&#xff08;這里不討論基于內存的文件系統&#xff09;&#xff0c;它們管理本地的磁盤存儲資源、提供文件到存儲位置的映射&#xff0c;并抽象出一套文件訪問接口供用戶使用。但隨著互聯網企業的高速發展&#xff0c;這些企業對數據…

編寫第二個Spring程序——AOP實現

第二個Spring程序 AOP范例 1、新建maven工程 2、在pom.xml文件導入相關jar包 <!-- https://mvnrepository.com/artifact/org.springframework/spring-core --><dependency><groupId>org.springframework</groupId><artifactId>spring-core<…

linux高負載下徹底優化mysql數據庫

同時在線訪問量繼續增大 對于1G內存的服務器明顯感覺到吃力嚴重時甚至每天都會死機 或者時不時的服務器卡一下 這個問題曾經困擾了我半個多月MySQL使用是很具伸縮性的算法&#xff0c;因此你通常能用很少的內存運行或給MySQL更多的被存以得到更好的性能。 安裝好mysql后&#x…

Java注釋說明以及IDEA中的快捷鍵

一、單行注釋 說明&#xff1a;單行注釋 一般注釋少量的代碼或者說明內容 格式&#xff1a;//注釋的內容 IDEA中的快捷鍵&#xff1a;使用Ctrl /&#xff0c; 添加行注釋&#xff0c;再次使用&#xff0c;去掉行注釋 二、多行注釋 說明&#xff1a;多行注釋 一般注釋大量的…

redhat系統雙網卡綁定

Redhat Linux的網絡配置&#xff0c;基本上是通過修改幾個配置文件來實現的&#xff0c;雖然也可以用ifconfig來設置IP&#xff0c;用route來配置默認網關&#xff0c;用hostname來配置主機名&#xff0c;但是重啟后會丟失。 1.相關的配置文件: /ect/hosts 配置主機名和IP地址…

JDK源碼解析之java.util.Iterator和java.lang.Iterable

在Java中&#xff0c;我們可以對List集合進行如下幾種方式的遍歷&#xff1a;第一種就是普通的for循環&#xff0c;第二種為迭代器遍歷&#xff0c;第三種是for each循環。后面兩種方式涉及到Java中的iterator和iterable對象&#xff0c;接下來我們通過源碼來看看這兩個對象的區…

為了讓你的網頁能在更多的服務器上正常地顯示,還是加上“SET NAMES UTF8”吧

Repinted:http://blog.csdn.net/class1/archive/2006/12/30/1469298.aspx 為了讓你的網頁能在更多的服務器上正常地顯示&#xff0c;還是加上“SET NAMES UTF8”吧(可以根據你的喜歡選擇相應的編碼,如gb2312)&#xff0c;即使你現在沒有加上這句也能正常訪問。 先說MySQL的字…

WebLogic11g 安裝配置規范

目錄 1 文檔控制... 3 1.1 修改記錄... 3 1.2 分發者... 3 1.3 審閱記錄... 3 1.4 相關文檔... 3 2 安裝準備... 4 2.1 安裝前需要開發單位提供的信息... 4 2.2 本地磁盤空間配置規范... 4 2.3 版本要求規范... 4 2.4 weblogic部署配置規范... 5 2.4.1操作系統要求.…

JDK源碼解析之java.util.ListIterator

ListIterator是一個功能更加強大的迭代器接口, 它繼承于Iterator接口,只能用于各種List類型的訪問。可以通過調用listIterator()方法產生一個指向List開始處的ListIterator, 還可以調用listIterator(n)方法創建一個一開始就指向列表索引為n的元素處的ListIterator。 一、源碼解…