scala之函數是個什麼鬼。

来源:http://www.cnblogs.com/intsmaze/archive/2016/08/06/5744766.html
-Advertisement-
Play Games

scala除了方法外還支持函數,方法是對對象進行操作,而函數不是。(類型與java中靜態方法,媽蛋,好歹也寫過C和C++這還理解不深刻了)。除此之外,寫法一樣。 object add{ //指定返回值類型,返回的值不需要使用return指定,會取最後一個表達式的值。 def abs(x:Double ...


scala除了方法外還支持函數,方法是對對象進行操作而函數不是。(類型與java中靜態方法,媽蛋,好歹也寫過C和C++這還理解不深刻了)。除此之外,寫法一樣。

 
object add{
 
//指定返回值類型,返回的值不需要使用return指定,會取最後一個表達式的值。
def abs(x:Double):Double = if(x>=0) x else -x
 
//函數體需要多個表達式完成,就用代碼塊咯,代碼塊特性看代碼塊知識點咯。算了,跟你提示一下,會取最後一個表達式的值。
def addInt( a:Int, b:Int ) : Int = {
var sum:Int = 0;
sum = a + b;
sum;
}
 
//也可以不指定返回值類型,scala編輯器可以通過=號右側的表達式類型推斷出返回類型。
def remoInt( a:Int, b:Int ) = {
var sum:Int = 0;
sum = a - b;
sum;
}
 
//這個就是簡化版,就是函數是無參,可以不寫()號,返回值類型不指定,scala推斷出來,表達式就一句,就不用代碼塊了。
def remoInt=22;// def remoInt() : Int = {22}
 
 
//遞歸函數,不指明返回類型會無法通過校驗,scala編譯器無法校驗n*fac(n-1)的類型時Int,我想不明白。
def fac(n:Int):Int = {
if(n<=0) 1 else n*fac(n-1)
}
// def fac(n:Int)= {
// if(n<=0) 1 else n*fac(n-1)
// }
 
//這裡返回值為(),因為你列印值,這樣相當於返回的unit類型,那不就是()值嗎。傻逼。
def foreacher(n:Int)= {
for(sum <- 0 to n)
{
println(sum);
}
}
 
def main(args: Array[String]) {
println(add.foreacher(3)+"---");
}
 
}

 

  預設參數格式
def decorete(str:String,left:String="[",right:String="]")=left+str+right;

我們可以看到這個函數有兩個參數left和right帶有預設值"["和"]"。

object add{
    
   def decorete(left:String="[",str:String,right:String="]")=left+str+right;
   
   def demo(str:String,left:String="[",right:String="]")=left+str+right;
   
   def main(args: Array[String]) {
//     println(add.decorete("nihao"));//檢查不通過,原因就是參數nihao匹配的是left字元串,而str字元串沒有傳入值。
       println(add.decorete("nihao","baby"));//nihaobaby]
       println(add.demo("nihao"));//[nihao]
       //原因就不需要解釋,看到這三個結果就明白了。
       
       //提供參數的時候指定參數名。
       println(add.decorete(str="baby"));//[baby]  沒指定的就預設值嘛,不要糾結,小韭菜們。
       println(add.decorete(left="[]",str="baby"));//[]baby]
       
       //混合也是可以的,不要糾結書本,就你去掉指定的參數,然後看你傳入沒指定參數的值和方法中沒有獲得傳入值且沒有預設值得參數位置匹配吧。匹配就通過,沒有就無法通過報錯。
       
       println(add.decorete(left="[]","baby"));//[]baby] 這個我們很明顯baby是作為方法參數中去掉指明參數後的第一個參數名的值。
       println(add.decorete(left="[]","baby","***"));//[]baby***  這下明白了把,再不明白,你可以去工地搬磚了。
    }
     
}

 

變長參數等我心情好了,就總結。

 

 

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

-Advertisement-
Play Games
更多相關文章
  • 最近在項目中碰到一個很頭疼的問題,在前端連接事件中寫了一個廣播線程,該廣播線程寫在while迴圈中,但是前臺會有很多個客戶端,沒連接一次就會有一個廣播線程開啟,很吃資源,剛開始我解決這個問題的方法是每次觸發連接事件是檢測一下當前連接數,如果是count_client<=1,就開線程,否則跳過廣播,但 ...
  • 在開發過程中經常需要發佈到開發環境、測試環境或者預發佈環境上給其他同事進行測試驗證效果等等,每次發佈都要備份,拷貝,修改配置文件等等重覆操作非常的麻煩,效率大打折扣,而web部署提供了這樣的解決方案:在服務端安裝Web Deploy服務,由Web Deploy服務完成備份發佈等操作,今天小編就以圖文 ...
  • 一、前言 Treeview控制項常用於遍歷本地文件信息,通常與Datagridview與ImageList搭配。ImageList控制項用於提供小圖片給TreeView控制項,DatagridView通常顯示TreeNode節點下文件及文件夾的信息。 效果圖: 二、代碼 初始化窗體: 初始化DataGri ...
  • 項目架構採用:Asp.Net MVC4.0 + EntityFramework6.0 code first + AutoMapper + Unity(IOC) + SqlServer2012 項目地址:www.xiaoboke.net 這個博客會不斷開發完善哦 歡迎大家去吐槽和提建議,一起學習,一起 ...
  • 使用自動載入和解析url的參數,實現調用到不同的控制器,實現了pathinfo模式和普通的url模式 文件結構: |--Controller |--Index |--Index.php |--Application.php Application.php \Controller\Index\Inde ...
  • 前言:在javaweb開發中自定義標簽的用處還是挺多的。今天和大家一起看自定義標簽是如何實現的。 1:什麼是標簽 標簽是一種XML元素,通過標簽可以使JSP頁面變得簡介易用,而且標簽具有很好的復用性。 2:自定義標簽的標簽庫主要的介面以及類的繼承實現關係圖 3:一步步實現自定義標簽 3.1:Tag接 ...
  • rest api的參數想即能支持application/x-www-form-urlencoded也能支持application/json方式傳參。 ...
  • 一、Hibernate中的關聯關係 1.1、單向一對多關聯關係 按照以下步驟配置hibernate中持久化類的一對多對象關聯: (1).持久化類添加關聯類的相關屬性及getter/setter方法。 (2).映射文件中建立該屬性和資料庫表欄位的映射信息。 比如班級對學生是一對多的關係,班級類Grad ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...