【第二阶段】kotlin函数引用

news2024/11/25 7:01:09

针对上篇传入函数参数我们也可以重新定义一个函数,然后在main中调用时传入函数对象
lambda属于函数类型的对象,需要把普通函数变成函数类型的对象(函数引用),使用“::”

/**
 * You can edit, run, and share this code.
 * play.kotlinlang.org
 */
fun main() {
  
     //第一种写法 使用“::”函数引用
      val info=login("kotlin","123456",::meResponseResult)
      println(info)
      
      //第二种写法 对象引用的函数引用
      val obj=::meResponseResult
     val info2=login("kotlin","123456",obj)
      println(info2)
}



//定义函数实现responseResult:(String,Int)->String):String
fun meResponseResult(msg:String,code:Int):String{
   return "登录结果:$msg,$code"
}

//模拟数据库SQLServer
const val USER_NAME_DB="kotlin"
const val USER_PWD_DB="123456"

//登录
/*
 * responseResult:(String,Int)->Unit) 传入响应结果的参数,同时也是获取响应结果的函数
 * 
 *  TODO()//Nothing类型,出现问题,终止程序
 *
 * */
private inline fun login(username:String,password:String,responseResult:(String,Int)->String):String{
    if(username==null||password==null){
        TODO("账号密码为空")//Nothing类型,出现问题,终止程序
    }
    //登录校验
    if(username.length>3&&password.length>3){
        if(isLogin(username,password)){
            //登录成功逻辑,以及处理登录成功后的业务
            //登录成功后返回响应结果,调用参数中的responseResult:(String,Int)->Unit)
             return responseResult("login success",200)
        }else{
             //登录失败逻辑,以及处理登录失败后的业务
             //登录失败后返回响应结果,调用参数中的responseResult:(String,Int)->Unit)
             return responseResult("login failed",444)
        }
    }else{
         TODO("账号密码不符合规范")//Nothing类型,出现问题,终止程序
    }
    return ""
}

//登录校验
private fun isLogin(username:String,password:String):Boolean{
    return if(username==USER_NAME_DB && password==USER_PWD_DB) true else false
}

执行结果
在这里插入图片描述

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

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

相关文章

[足式机器人]Part3机构运动微分几何学分析与综合Ch03-1 空间约束曲线与约束曲面微分几何学——【读书笔记】

本文仅供学习使用 本文参考: 《机构运动微分几何学分析与综合》-王德伦、汪伟 《微分几何》吴大任 Ch01-4 平面运动微分几何学 3.1 空间曲线微分几何学概述3.1.1 矢量表示3.1.2 Frenet标架 连杆机构中的连杆与连架杆构成运动副,该运动副元素的特征点或特…

二十二、策略模式

目录 1、项目需求2、传统方案解决鸭子问题的分析和代码实现3、传统方式实现存在的问题分析和解决方案4、策略模式基本介绍5、使用策略模式解决鸭子问题6、策略模式的注意事项和细节7、策略模式的使用场景 以具体项目来演示为什么需要策略模式,策略模式的优点&#x…

GitHub 如何部署写好的H5静态页面

感谢粉皮zu的私信,又有素材写笔记了。(●’◡’●) 刚好记录一下我示例代码的GitHub部署配置,以便于后期追加仓库。 效果 环境 gitwin 步骤 第一步 新建仓库 第二步 拉取代码 将仓库clone到本地 git clone 地址第三步 部署文件 新建.github\workflo…

线性规划模型-应用篇

文章目录 模型特点使用技巧工具包和求解器模型线性化 应用实例经验总结 模型特点 上一篇中,详细阐述了线性规划问题和单纯形法的算法原理,本文将着重介绍线性模型在工业场景中的应用。 首先需要说清楚的是,为什么线性模型深受研发人员青睐。…

五、约束编程求解优化问题

文章目录 1、瑶草问题-离散优化问题2、重试优化3、分支限界法-改进重试优化法4、重启式搜索4.1 重启方针/策略4.2 自动化搜索策略 THE END 1、瑶草问题-离散优化问题 \qquad 要求在一个建木上构建一个完整的分枝树,每一个完整的分枝有100段,完整分枝上的…

2023年《开学第一课》播出时间是什么时候?开学第一课怎么在手机上观看高清直播?

2023年《开学第一课》播出时间是什么时候? 根据往年《开学第一课》播出时间预计2023年《开学第一课》播出时间是2023年9月1日20:00,如有变化请以官方公布为准; 2023年开学第一课怎么在手机上观看高清直播? 1、打开手机微信&…

第三章,矩阵,07-用初等变换求逆矩阵、矩阵的LU分解

第三章,矩阵,07-用初等变换求逆矩阵、矩阵的LU分解 一个基本的方法求 A − 1 B A^{-1}B A−1BLU分解例1,求矩阵A的LU分解:例12,LU分解解线性方程组: 玩转线性代数(19)初等矩阵与初等变换的相关应用的笔记&a…

Rx.NET in Action 第一章学习笔记

Part 1 初入反应式扩展 什么是反应式程序?它们有什么用?使用反应式扩展(Rx)编程,会如何改变你编写代码的方式?在开始使用 Rx 之前应该做些什么?为什么 Rx 比传统的事件驱动编程更好&#xff1f…

简单认识Zabbix监控系统及配置

文章目录 一、zabbix概述1、定义2、zabbix监控原理3、监控对象4、zabbix的3种架构(1) C/S架构(2)分布式架构:zabbix-proxy-client架构(3) master-node-client架构 5、zabbix监控模式 二、部署za…

Apollo Planning2.0决策规划算法代码详细解析 (1):环境搭建

背景: apollo开源团队近期更新了planning版本,对代码进行了一定程度上的重构。 重构后代码结构更加清晰,对扩展更为友好;此外,也更新了dreamview对pnc的支持,使得调试更加方便。 本教程将继续更新对于Apollo Planning2.0决策规划算法代码的详细解析,便于大家更好理解…

[鹏城杯 2022]简单包含

直接用php:// 有wtf 加脏数据绕过

Spring boot中的线程池-ThreadPoolTaskExecutor

一、jdk的阻塞队列: 二、Spring boot工程的有哪些阻塞队列呢? 1、默认注入的ThreadPoolTaskExecutor 视频解说: 线程池篇-springboot项目中的service层里简单注入ThreadPoolTaskExecutor并且使用_哔哩哔哩_bilibili 程序代码:…

Impala实践:解析glog打印的 C++ 报错堆栈

Impala实践:解析glog打印的 C 报错堆栈 Impala使用glog生成日志。生产环境用的都是release build,glog产生的报错堆栈里没有函数名,很难像Java报错堆栈那样方便定位问题。下面是 Impalad 日志中的一个报错: I0522 09:07:16.0020…

浅复制和深复制(使用python)

在编程语言中,复制通常是通过赋值操作来实现的。具体实现方式可能因编程语言而异。 1. 浅复制(Shallow Copy) 浅复制是指创建一个新对象,新对象的内容是原始对象的引用。换句话说,新对象和原始对象共享相同的数据&am…

【JVM】JVM 调优的参数都有哪些?

文章目录 1. 设置堆空间大小2. 虚拟机栈的设置3. 年轻代中Eden区和两个Survivor区的大小比例4. 年轻代晋升老年代阈值5. 设置垃圾回收收集器 1. 设置堆空间大小 设置堆的初始大小和最大大小,为了防止垃圾收集器在初始大小、最大大小之间收缩堆而产生额外的时间&…

【Linux系统编程】21.echo、env、fork、getpid、getppid

目录 echo PATH SHELL TERM LANG HOME env fork 返回值 getpid getppid 测试代码1 测试结果 测试代码2 测试结果 父子进程相同 父子进程不同 父子进程共享 echo 查看单个环境变量。 PATH 可执行文件的搜索路径。 SHELL 当前Shell。 TERM 当前终端类型。终端…

一休休的面试题

重点面试题(今天又看了很多的博客大概有个三十来篇吧所以总结了一休休的面试题): ps:已经入秋了为什么还是这么热!!! 1、受管 bean 的生命周期 对于普通的 Java 对象,new 的时候会去创建对象,而当它没有…

Redis进阶(3)——在Linux上基于Docker容器Redis搭建一主二从三哨兵 SpringBoot整合Redis哨兵

目录 引出redis主从搭建:一主2从6389Master准备文件redis.confredis.log日志文件运行容器查看日志方式tail 6390Slave6391Slave 创建3哨兵创建文件夹sentinel创建运行哨兵容器问题:脑裂问题 SpringBoot整合Redis哨兵启动1主2从,3哨兵pom.xml文…

聊聊服务端缓存那些事(预热、淘汰、污染、雪崩、穿透、击穿等)

文章目录 概要一、缓存预热二、缓存污染2.1、先更新数据库再更新缓存2.2、先更新缓存再更新数据库2.3、先删除缓存再更新数据库,读时再更新2.4、先更新数据库再删除缓存,读时再更新2.5、缓存污染总结2.6、删除缓存失败了怎么办?2.7、延迟双删…

【数据结构与算法】十大经典排序算法-堆排序

🌟个人博客:www.hellocode.top 🏰Java知识导航:Java-Navigate 🔥CSDN:HelloCode. 🌞知乎:HelloCode 🌴掘金:HelloCode ⚡如有问题,欢迎指正&#…