在 Kotlin 中使用函數類型和 lambda 表達式

參考官方文檔:

https://developer.android.google.cn/codelabs/basic-android-kotlin-compose-function-types-and-lambda?hl=zh-cn#0

1、 將函數存儲在變量中

  • 作為一種一級結構,函數也屬于數據類型,因此,可以將函數存儲在變量中、將函數傳遞到函數,以及從函數返回函數。
  • 如需將函數作為值引用,您需要使用函數引用運算符 ::
	fun main() {val trickFunction = ::trick}fun trick() {println("No treats!")}

2、使用 lambda 表達式定義函數

  • lambda 表達式提供了簡潔的語法來定義函數,無需使用 fun 關鍵字。您可以直接將 lambda 表達式存儲在變量中,無需對其他函數進行函數引用。語法圖如下:
    在這里插入圖片描述

  • 使用 lambda 表達式定義函數時,有一個引用該函數的變量。還可以像對待任何其他類型一樣,將其值分配給其他變量,并使用新變量的名稱調用該函數。

	fun main() {val trickFunction = trick// 調用方式trick()trickFunction()}val trick = {println("No treats!")}
  • 在 main() 函數中,移除函數引用運算符 ::,因為 trick 現在引用的是變量,而不是函數名稱。
  • 在 main() 函數中,調用 trick() 函數,但這次要包含圓括號,就像您在調用任何其他函數時所做的那樣。
  • 同理,將 trickFunction 變量視為函數進行調用。
  • 借助 lambda 表達式,您可以創建用于存儲函數的變量,像調用函數一樣調用這些變量,并將其存儲在其他可以像函數一樣調用的變量中。

3、將函數用作數據類型

  • 函數類型由一組圓括號組成,其中包含可選的參數列表、-> 符號和返回值類型。語法如下圖所示:
    在這里插入圖片描述
	val treat: () -> Unit = {println("Have a treat!")}
  • treat 變量的數據類型為 () -> Unit,圓括號為空,因為函數沒有任何參數;返回值類型為 Unit,因為函數不返回任何內容。如果您的參數接受兩個 Int 參數并返回 Int,則其數據類型為 (Int, Int) -> Int。

4、將函數用作返回值類型

  • 函數是一種數據類型,因此您可以像使用任何其他數據類型一樣使用函數。您甚至可以從其他函數返回函數。語法如下圖所示:
    在這里插入圖片描述
	fun trickOrTreat(isTrick: Boolean): () -> Unit {if (isTrick) 

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

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

相關文章

計算機硬件組成原理

🧠 一、計算機的硬件組成:五大核心部件 根據“馮諾依曼體系結構”,現代計算機主要由這 5大部分組成:部件作用通俗解釋1?? 運算器(ALU)負責算術和邏輯運算會加減乘除和做判斷的“計算工廠”2?? 控制器&a…

告別 window.open,擁抱全新浮窗體驗!

深入了解 Document Picture-in-Picture API,并對比 Modal 的最佳使用場景在前端開發中,我們經常會遇到這樣的需求:彈出一個浮動窗口來顯示一些實時信息、工具欄或視頻內容。過去我們會用 window.open(),后來越來越多的開發者傾向于…

Python爬蟲實戰:研究weiboSpider技術,構建新浪微博數據采集系統

1. 引言 1.1 研究背景 在信息時代,社交媒體已成為人們獲取信息、表達觀點的重要渠道。微博作為其中的典型代表,擁有龐大的用戶群體和活躍的內容生態。截至 2023 年底,微博月活躍用戶數已超過 5.8 億,日均發博量達數千萬條,數據涵蓋社會熱點、公眾情緒、消費偏好等多維度…

HashMap初始化容量為10,還未添加數據時,它的實際容量是多少?

在Java中&#xff0c;當使用 new HashMap<>(10) 初始化一個容量為10的 HashMap 但尚未添加任何數據時&#xff0c;其實際容量&#xff08;底層數組的長度&#xff09;不是10&#xff0c;而是16。原因如下&#xff1a;關鍵機制解析&#xff1a;容量必須是2的冪HashMap要求…

前端開發:CSS(2)—— 選擇器

前面我們初步學習了CSS&#xff0c;對其有了基本的認識。下面我們來具體學習CSS中的選擇器。 目錄 選擇器的種類 1.基礎選擇器 &#xff08;1&#xff09;標簽選擇器 &#xff08;2&#xff09;類選擇器 &#xff08;3&#xff09;id選擇器 &#xff08;4&#xff09;通…

人工智能2.0時代的人才培養和通識教育

目錄引言&#xff1a;從"機器模仿"到"智能協同"的時代跨越一、人工智能2.0的技術演進&#xff1a;從規則到大模型的三次躍遷1. 人工智能0.0&#xff08;1956-2006&#xff09;&#xff1a;規則驅動的"專家系統時代"2. 人工智能1.0&#xff08;20…

管理索引常用的API

二.管理索引常用的API 1.查看現有索引信息 查看所有索引信息列表&#xff1a;curl -X GET http://elk101.k8s.com:9200/_cat/indices?v查看某個索引的詳細信息:curl -x GET http://elk101.k8s.com:9200/linux-2020-10-2溫馨提示: (1)"?v"表示輸出表頭信息&#xff…

當文檔包含表格時,如何結合大模型和OCR提取數據?

在AI應用極速發展的當下&#xff0c;LLM&#xff08;大語言模型&#xff09;與RAG&#xff08;檢索增強生成&#xff09;系統已成為構建智能問答、知識管理等高階應用的核心引擎。 然而&#xff0c;許多團隊在項目落地時遭遇了現實的挑戰&#xff1a;模型的實際表現——無論是回…

機器學習工程化 3.0:從“實驗科學”到“持續交付”的 7 個關卡

一、背景&#xff1a;為什么 90% 的 ML 項目死在了實驗臺&#xff1f; Gartner 2024 報告顯示&#xff0c;87% 的企業機器學習項目未能走出實驗室。原因并非算法落后&#xff0c;而是缺少“工程化骨骼”&#xff1a;數據漂移無人發現&#xff0c;模型上線一周就失效&#xff1b…

BGP筆記整理

一、BGP 基礎概念1. 產生背景BGP&#xff08;Border Gateway Protocol&#xff09;是自治系統&#xff08;AS&#xff09;間的動態路由協議&#xff0c;屬于外部網關協議&#xff08;EGP&#xff09;&#xff0c;用于在不同 AS 之間傳遞路由信息。2. 自治系統&#xff08;AS&am…

Mysql-MVCC機制

1. MVCC機制詳解 在Read Uncommitted級別下&#xff0c;事務總是讀取到最新的數據&#xff0c;因此根本用不到歷史版本&#xff0c;所以MVCC不在該級別下工作。 在Serializable級別下&#xff0c;事務總是順序執行。寫會加寫鎖&#xff0c;讀會加讀鎖&#xff0c;完全用不到MVC…

MySQL面試題及詳細答案 155道(061-080)

《前后端面試題》專欄集合了前后端各個知識模塊的面試題&#xff0c;包括html&#xff0c;javascript&#xff0c;css&#xff0c;vue&#xff0c;react&#xff0c;java&#xff0c;Openlayers&#xff0c;leaflet&#xff0c;cesium&#xff0c;mapboxGL&#xff0c;threejs&…

大數據中需要知道的監控頁面端口號都有哪些

以下是一些大數據中常見組件監控頁面的端口號&#xff1a;1. Hadoop&#xff1a;HDFS Web UI在Hadoop2.x版本中默認端口為50070&#xff0c;在Hadoop3.x版本中為9870&#xff0c;用于查看集群文件及目錄&#xff1b;YARN Web UI端口為8088&#xff0c;可查看MR執行情況&…

時隔六年!OpenAI 首發 GPT-OSS 120B / 20B 開源模型:性能、安全與授權細節全解

為什么這次開放值得關注&#xff1f; OpenAI 時隔六年再次“放權重”&#xff0c;一次性公布 gpt-oss-120b 與 gpt-oss-20b 兩個尺寸&#xff0c;并允許商業化二次開發 —— 采用 Apache 2.0 許可且可直接在 Hugging Face 下載(WIRED)。官方表示&#xff0c;開放旨在 降低門檻…

漏洞全講解之中間件與框架漏洞(數字基礎設施的“阿喀琉斯之踵“)

一、中間件漏洞的嚴峻現狀根據Synopsys《2023年開源安全報告》顯示&#xff1a;企業應用中平均包含158個中間件依賴高危漏洞年增長率達62%&#xff08;X-Force數據&#xff09;最危險漏洞&#xff1a;Log4j2&#xff08;CVE-2021-44228&#xff09;影響全球83%企業平均修復延遲…

Leetcode——菜鳥筆記2(移動0)

文章目錄題目解題題目 解題 /*nums【0&#xff0c;1&#xff0c;0&#xff0c;3&#xff0c;2】numsSize5 nums【1.3.2.0.0】 1.找非零數&#xff0c;依次放在前面 2.剩下補0 */ void moveZeroes(int* nums, int numsSize) {int count0 0;int temp 0;for (int i 0; i < …

【LINUX網絡】應用層自定義協議與序列化——通過實現一個簡單的網絡計算器來體會自定義協議

在了解了各種協議的使用以及簡單的socket接口后&#xff0c;學會了“怎么傳”的問題&#xff0c;現在來了解一下“傳什么”的問題。 1. 序列化與反序列化 在前面的TCP、UDP的socket api 的接口, 在讀寫數據時, 都是按 "字符串" 的方式來發送接收的. 如果我們要傳輸一…

電腦一鍵重裝系統win7/win10/win11無需U盤(無任何捆綁軟件圖文教程)

建議還是使用U盤進行重裝系統&#xff0c;如果暫時還不會沒有U盤&#xff0c;那就按照我這個來吧。 一&#xff0c;工具下載&#xff1a; 一鍵重裝工具 密碼:g5p3 二&#xff0c;鏡像下載: 鏡像站點&#xff1a;MSDN, 我告訴你 - 做一個安靜的工具站 可以下載需要重裝的系統…

深入探索Supervision庫:Python中的AI視覺助手

深入探索Supervision庫&#xff1a;Python中的AI視覺助手 在計算機視覺和機器學習領域&#xff0c;數據處理和結果可視化是項目成功的關鍵環節。今天我們將深入探討一個強大的Python庫——Supervision&#xff0c;它專為簡化AI視覺項目的工作流程而設計。 什么是Supervision&am…

面向對象之類、繼承和多態

系統是由匯總了數據和過程的“對象”組成的。在面向對象中&#xff0c;軟件被定義為“類”&#xff0c;然后創建“實例”并運行。系統是通過“實例”之間的互相交換“消息”而運行的&#xff0c;但由于進行了“封裝”&#xff0c;所以無法查看內部的詳細內容&#xff0c;這被稱…