kotlin函数

1、函数定义

// 下边定义了main函数
fun main() {}

2、函数的类型

// foo函数定义
fun foo () {} // 对应无参类型 () -> Unit
fun foo (a: Int):String {} // 对应有参类型 (Int) -> String

3、函数的引用

函数的引用类似C语言中的函数指针,可用于函数传递:

fun foo() {} // 如果想引用foo函数,需要使用 ::foo
fun foo(a:String):Any {} // 如果想引用有参foo函数,跟上边一样需要使用 ::foo// 类中方法的引用,需使用 Foo::bar
class Foo{fun bar(){}
}

实际引用例子:

fun foo() {}
fun bar(a:String):Any { return "Hello"}
class Foo {fun bar(a:String):Any { return "Hello"}
}
// 引用foo函数
val fn:() -> Unit = ::foo
// 引用bar函数
val bfn:(String) -> Any = ::bar
// 引用Foo类的bar方法
val fooFn:(Foo, String) -> Any = Foo::bar
// ================================================================
// 上边类中的方法引用,也可以用下面这种形式
val f = Foo() // 实例化类
val fbar = f::bar // 使用实例化的对象f::bar方法,也可以引用Foo类中的bar方法

4、函数中的边长参数

// 方法定义
fun main() {foo("a","b","c")
}
fun foo(vararg a:String) {println(a.toList()) // 把传进来的参数转成List [a,b,c]// 打印参数println(a.joinToString()) // a,b,c
}

kotlin内置的函数参数中很多都是定义的变长参数,如 listOf:

public fun <T> listOf(vararg elements: T): List<T>

5、函数的伪多返回值

多返回值,其实就是返回类型下手,比如返回Pair类型:

// 方法定义
fun main() {// 函数调用方式1 -> 解构方式取值val (r1, r2) = foo()println("r1:$r1,r2:$r2") // r1:a,r2:b// 函数调用方式2 -. 正常取值val r:Pair<String, String> = foo()println("r:$r") // r:(a, b)
}
fun foo():Pair<String,String> {return Pair("a", "b")
}

6、函数默认参数

// 方法定义
fun main() {foo()foo("world")
}
// 定义默认参数
fun foo(a:String = "hello"):Unit {println("a:$a") // a:hello  /  a:world
}

7、函数具名参数

// 方法定义
fun main() {foo(b="world") // 使用具名参数,指定传给函数的某个参数
}
// 定义默认参数
fun foo(a:String = "hello", b:String):Unit {println("$a, $b") // hello, world
}

8、总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/30594.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

外包干了2年,彻底废了...

先说一下自己的情况。大专生&#xff0c;17年通过校招进入湖南某软件公司&#xff0c;干了接近2年的点点点&#xff0c;今年年上旬&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落&#xff01;而我已经在一个企业干了五年的功能测试…

选择江苏显卡服务器租用的优势有哪些?

显卡服务器有着强大的计算功能&#xff0c;可以使用图形处理器进行计算与运算&#xff0c;十分适用于对计算性能需求比较高的企业和组织&#xff0c;本文主要来介绍选择江苏显卡服务器租用的优势有哪些吧&#xff01; 江苏显卡服务器使用了先进的实时高速的并行计算技术和浮点计…

【docker安装rabbitmq】

docker安装rabbitmq 1.查阅rabbitmq的Dokcer Hub官方说明 rabbitmq地址&#xff0c;因为我们需要使用的是带管理界面的rabbitmq服务。所以我们需要下载的rabbitmq:management镜像 docker pull rabbitmq:management2.启动rabbitmq 2.1.快速启动 One of the important thing…

Go中的channel是同步还是异步

Go语言中的channel可以是异步也可以是同步&#xff0c;这取决与它是否是一个缓冲的channel。 同步channel 无缓冲的channel默认是同步的channel类型&#xff0c;即创建时没有执行缓冲大小。当数据被发送到无缓冲的channel中时&#xff0c;发送者会阻塞直到接受者收到数据。同…

笔记本系统盘移植与windowsLinux双系统安装

目录 一、 前言二、 Windows系统移植二、 安装Linux三、 Windows分区配置 一、 前言 笔记本内存不够了&#xff0c;之前给笔记本添加了一个机械硬盘&#xff0c;也几乎爆满了&#xff0c;于是购置了1T的固态硬盘&#xff0c;打算用这个固态硬盘安装双系统&#xff0c;剩余空间…

胡说八道(24.6.18)——通信杂谈(科普知识)

既聊完中国和西方的通信历史之后&#xff0c;咱们继续来看看与有线通信相对应的无线通信&#xff0c;至于有线通信线的类型这里就不多说&#xff0c;像电话线&#xff0c;光纤&#xff0c;电缆(用于有线电视信号传输、早期的计算机网络)等&#xff0c;这些都是有线通信的范围。…

[面试题]消息队列

[面试题]Java【基础】[面试题]Java【虚拟机】[面试题]Java【并发】[面试题]Java【集合】[面试题]MySQL[面试题]Maven[面试题]Spring Boot[面试题]Spring Cloud[面试题]Spring MVC[面试题]Spring[面试题]MyBatis[面试题]Nginx[面试题]缓存[面试题]Redis[面试题]消息队列 什么是…

GPT4v和Gemini-Pro调用对比

要调用 GPT-4 Vision (GPT-4V) 和 Gemini-Pro&#xff0c;以下是详细的步骤分析&#xff0c;包括调用流程、API 使用方法和两者之间的区别&#xff0c;以及效果对比和示例。 GPT-4 Vision (GPT-4V) 调用步骤 GPT-4 Vision 主要通过 OpenAI 的 API 进行调用&#xff0c;用于处…

【趣味测试】

编程过程中遇到的趣味知识 1 Cpp 1.1 浮点数计算 if (0.1 0.2 0.3) {std::cout << "0.1 0.2 0.3 true" << std::endl;} else {std::cout << "0.1 0.2 0.3 false" << std::endl;}if (0.1 0.3 0.4) {std::cout << &…

喜讯!昂辉科技通过2024年度重点产业链企业(第一批)认定

日前&#xff0c;合肥市推进战略性新兴产业发展工作委员会办公室公布了 2024年度重点产业链企业&#xff08;第一批&#xff09;新入库名单&#xff08;集成电路、新型显示、网络与信息安全、城市安全、空天信息、新能源汽车和智能网联汽车、生物医药、新材料、高端装备、节能环…

嵌入式学习——Linux高级编程复习(网络编程)——day42

1. 协议 通信双方约定的一套标准称为协议 2. OSI参考模型 OSI模型是由国际标准化组织&#xff08;ISO&#xff09;制定的一个概念性的网络通信模型&#xff0c;它将网络通信的功能分为七个层次&#xff0c;从下至上分别为&#xff1a; 物理层&#xff08;Physical Layer&…

百度一下首页制作(HTML+CSS)

部分代码展示&#xff1a; <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>百度一下&#xff0c;你就知道</title><style type"text/css">/*清除元素默认性质*/body { margin: 0;padding: 0;list-…

前端传进来的单选值是0,到了后端加了个逗号

如上图所示&#xff0c;标记的var的值org和id的值orgOrNot不能一样&#xff0c;如果一样&#xff0c;通过id获取&#xff08;#(“#orgOrNot”).find(“option:selected”).val()&#xff09;时候就会出现这种情况 改成如下情况&#xff0c;区别开id

java基础·小白入门(三)

目录 类的继承基本概念方法覆盖Object类 抽象类接口枚举和包枚举 包 类的继承 基本概念 继承是一种由已有的类创建新类的机制。在Java中&#xff0c;通过关键字extends继承一个已有的类&#xff0c;被继承的类称为父类&#xff08;超类&#xff0c;基类&#xff09;&#xff…

C++语法17 利用for循环进行求和与求积

语法阶段已经更新到第17章了&#xff0c;前面的知识你都学会了吗&#xff1f;如果还没有学习前面的知识&#xff0c;请点击语法专栏进行[http://t.csdnimg.cn/7EcJm]学习哦&#xff01; 目录 循环求和 整数求和 解析 参考代码 分数求和 解析 参考代码 偶数求和 解析 参…

opencv学习笔记(1)

图像&视频的加载与展示 如何通过OpenCV创建显示窗口 namedWindow():创建一个窗口&#xff0c;并给窗口起一个名字&#xff0c;当起好名字后&#xff0c;可以选择显示哪个窗口 imshow()&#xff1a;显示窗口 &#xff0c;第一个参数是窗口的名字&#xff0c;如果没有会自动…

代码随想录训练营第十四天 226翻转二叉树 101对称二叉树 104二叉树的最大深度 111二叉树的最小深度

第一题&#xff1a; 原题链接&#xff1a;226. 翻转二叉树 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 递归法&#xff1a;使用中序遍历的操作&#xff0c;中左右&#xff0c;在遍历到中间节点的时候对它左右节点进行交换。 代码如下&#xff1a; /*** Def…

BC-Linux 8.6最小化安装的服务器启用GNOME图形化界面

本文记录了BC-Linux 8.6最小化安装的服务器如何启用GNOME图形化界面的过程。 一、服务器环境 1、系统版本 [rootlocalhost ~]# cat /etc/os-release NAME"BigCloud Enterprise Linux" VERSION"8.6 (Core)" ID"bclinux" ID_LIKE"rhel fe…

在VScode中创建PHP环境

一、下载PHP Server 和 PHP Debug这两个扩展 二、下载完成之后&#xff0c;在VScode中&#xff0c;打开我们写代码的文件 这里是我事先创建好的一些文件&#xff0c;本次环境搭建只需要创建一个.php后缀的文件即可。 先选中.php文件&#xff0c;再点击文件。 点击首选项&#x…

AI之Lambda index

简介 Lambda index 是一个用于衡量语言模型性能的指标,它主要评估模型在生成文本时的语言连贯性和逻辑性。它是由 OpenAI 在发布 GPT-3 模型时提出的。 具体来说,lambda index 反映了模型生成的文本中单词与上下文的关联程度。它的计算方式如下: 1、给定一个文本序列 X (x1…