当前位置: 首页 > news >正文

设计的素材网站有哪些绛帐做企业网站

设计的素材网站有哪些,绛帐做企业网站,东莞网站建设营销哪家好,小程序商城哪家好推荐Scala 函数(Function) 概述 将一段逻辑进行封装便于进行重复使用#xff0c;被封装的这段逻辑就是函数。在Scala中#xff0c;必须通过def来定义函数 基本语法 def 函数名(参数列表) : 返回值类型 {函数体return 返回值 }案例 // 案例#xff1a;定义函数计算两个整数的…Scala 函数(Function) 概述 将一段逻辑进行封装便于进行重复使用被封装的这段逻辑就是函数。在Scala中必须通过def来定义函数 基本语法 def 函数名(参数列表) : 返回值类型 {函数体return 返回值 }案例 // 案例定义函数计算两个整数的和 // 标准写法 def sum(a: Int, b: Int): Int {return a b } // 因为在Scala中所有的结构都必须有返回值 // 所以在函数中如果不指定默认会将最后一行的计算结果作为返回值 // 也因此可以省略return不写 def sum(a: Int, b: Int): Int {a b } // 如果函数体只有一句话那么此时也可以省略{}不写 def sum(a: Int, b: Int): Int a b // 参数类型非常明确并且可以由计算结果来确定返回值类型 // 那么也就意味着此时可以推导出结果类型因此可以省略返回值类型不写 def sum(a: Int, b: Int) a b练习定义一个函数判断一个数字是否是质数 package com.fesco.methodobject MethodExer1 {def main(args: Array[String]): Unit {println(isPrime(19))println(isPrime(25))}// 判断数字是否是质数/*定义函数明确问题1. 是否需要参数 - 是否有未知量来参与运算需要在调用函数的时候传入这个数据2. 明确结果类型 - 判断是不是的问题那么结果类型应该是布尔值3. 明确计算逻辑*/def isPrime(n: Int): Boolean {// 判断传入的参数n是否是一个质数// 1及以下的数字不是质数if (n 1) falseelse if (n 2) trueelse {for (i - 2 until n) {if (n % i 0) return false}// 如果整个循环结束都没有返回false那么说明所有数字都无法整除true}}}案例 // 打印n行*组成的三角形 def printStar(n: Int): Unit {for (i - 1 to n)println(* * i) } // 可以推导出结果类型 def printStar(n: Int) {for (i - 1 to n)println(* * i) } // 如果返回值类型是Unit那么此时可以省略不写 def printStar(n: Int) {for (i - 1 to n)println(* * i) } // 如果代码只有一行并且返回值类型还是Unit那么此时或者{}只能省略其一 def printStar(n: Int) for (i - 1 to n) println(* * i)案例 package com.fesco.methodobject MethodDemo3 {def main(args: Array[String]): Unit {// 如果函数在调用的时候没有参数()可以写可以不写println(rand100())println(rand100)// 如果函数在定义的时候就没有()那么调用的时候也不能写()println(rand)}// 产生1-100之间的随机数def rand100():Int (Math.random() * 100 1).toInt// 函数没有参数的因此()可以省略def rand:Int (Math.random() * 100 1).toInt}参数 可变参数 所谓可变参数指的是在调用函数的时候参数个数可以变化 案例 package com.fesco.methodobject MethodDemo4 {def main(args: Array[String]): Unit {println(sum(4.2, 1.84, 8.741, 7.2, 2.05))}// 计算传入的数字的和// 通过*来定义可变参数def sum(nums: Double*): Double {var sum 0.0for (n - nums)sum n// 将结果返回sum}}注意函数中最多只能定义一个可变参数并且必须放在参数列表的末尾 默认参数 默认参数在定义函数的时候就给参数一个默认值。在调用函数的时候如果指定了值就使用指定的来计算如果没有指定就使用默认值来计算 案例 package com.fesco.methodobject MethodDemo5 {def main(args: Array[String]): Unit {// 在调用函数的时候如果没有传入折扣那么就使用默认值println(offPrice(180))// 如果传入了折扣那么就按照传入的折扣来计算println(offPrice(150, 0.88))}// 案例计算打折之后的价格// 如果需要打折那么就指定折扣// 如果不需要打折希望off就是1def offPrice(price: Double, off: Double 1.0): Double {if (off 0 || off 1) throw new IllegalArgumentExceptionprice * off} }函数的调用 Scala中也是通过函数名(参数)的形式来调用函数但是Scala提供了省略调用和带名调用 省略调用如果函数没有参数那么在调用函数的时候可以省略()不写 println() // 省略调用 println如果函数定义的时候有()那么在调用的时候可以写()也可以不写()如果函数定义的时候就没有()那么调用的时候就不能有() 带名调用在调用函数的时候指定参数名来赋值 package com.fesco.methodobject MethodDemo6 {def main(args: Array[String]): Unit {info(bob, 男, 19)info(name bob, gender 男, age 19)// 带名调用的时候参数顺序可以不一致info(gender 男, age 19, name bob)message(name David, age 15)println(offPrice(180, off 0.92))}def info(name: String, gender: String, age: Int) println(s姓名$name\n性别$gender\n年龄$age)// 默认参数def message(name: String, gender: String 男, age: Int) println(s姓名$name\n性别$gender\n年龄$age)def offPrice(price: Double, vip: Int 0, off: Double 1) {if (vip 0) price * offelse if (vip 3) price * 0.95 * offelse if (vip 7) price * 0.9 * offelse price * 0.85 * off}}函数和方法 Java中函数就是方法方法也是函数。在Scala中函数的范围会比方法要稍微大一点 Scala中函数可以定义在任何位置即函数可以定义在类或者函数内 object MethodDemo7 {def main(args: Array[String]): Unit {// 在函数中定义函数def sum(x: Int, y: Int) x yprintln(sum(3, 5))}}如果需要细分定义在类中的函数称之为方法定义在其他地方的就是函数 在Scala中函数是一等公民即函数可以定义在任何地方也可以被当作参数进行传递当作结果进行返回当作变量被赋值 函数赋值给变量/常量 package com.fesco.functionobject FunctionDemo1 {def main(args: Array[String]): Unit {// 函数作为一等公民可以被定义在任何位置def rand(): Int (Math.random() * 100).toInt// 调用函数打印结果println(rand())// 将函数的计算结果赋值给变量/常量val r rand()println(r)val r2 randprintln(r2)// 不是调用rand函数而是把rand函数作为数据传递给f// 所以此时可以认为f既是一个常量也是一个函数// 常量f的数据类型是() Intval f: () Int rand _println(f)// 调用函数fprintln(f())def sum(x: Int, y: Int): Int x y// 将sum函数作为一个整体数据赋值给常量s// 此时可以认为s既是一个常量也是一个函数// s的数据是一个函数// sum的参数类型是(Int, Int)返回值是Int// 所以s的数据类型(Int, Int) Intval s: (Int, Int) Int sum _// 打印常量s的数据println(s)// 调用s中的函数println(s(3, 5))// 匿名函数val a1: (Int, Int) Int (x: Int, y: Int) x yprintln(a1)println(a1(2, 4))// 定义常量a2的时候已经指定了要封装的参数的类型在定义函数的时候就可以省略参数类型val a2: (Int, Int) Int (x, y) x yprintln(a2)println(a2(2, 4))}}高阶函数 当一个函数的参数是另一个函数或者返回值是另一个函数的时候这个函数就是高阶函数 将函数作为参数进行传递 package com.fesco.functionobject FunctionDemo2 {def main(args: Array[String]): Unit {// 需求定义一个函数对两个整数进行计算返回一个整数/*1. 明确参数a. 两个整数是未知的所以需要以参数形式来体现b. 对这俩整数来进行计算计算规则是未知的所以同样需要将计算规则以参数形式来体现2. 计算逻辑要利用传入的规则对两个参数来进行计算*/def calcInt(x: Int, y: Int, f: (Int, Int) Int): Int f(x, y)// 定义计算规则def times(x: Int, y: Int): Int x * y// 调用calcInt函数传入参数和规则println(calcInt(3, 6, times))// 新规则def subtract(x: Int, y: Int): Int x - y// 传入规则println(calcInt(3, 6, subtract))// 可以直接传入规则println(calcInt(3, 6, (x: Int, y: Int) {x - y}))// 当函数体只有一句的时候{}可以省略println(calcInt(3, 6, (x: Int, y: Int) x - y))// 定义calcInt函数的时候就已经指定了规则f中的参数类型和结果类型所以参数类型可以省略println(calcInt(3, 6, (x, y) x - y))// 在匿名函数中依次调用了参数并且只调用一次那么可以省略参数列表不写用_来依次代替每一个参数println(calcInt(3, 6, _ - _))println(calcInt(3, 6, _ * _))}}将函数作为结果进行返回 package com.fesco.functionobject FunctionDemo3 {def main(args: Array[String]): Unit {// 定义一个函数可以依次传入两个整数求和// 可以先传入一个整数然后再传入另一个整数// 如果只有一个参数可以省略()不写// def sum(x: Int): (Int) Int {// def sum(x: Int): Int Int {// 如果在定义函数的时候没有写返回值类型而是由编译器自动推导那么返回函数的时候必须添加_/*def sum(x: Int) {def add(y: Int): Int x yadd _}*/// 如果在定义函数的时候指定了返回值类型那么返回函数的时候可以不用添加_def sum(x: Int): Int Int {def add(y: Int): Int x yadd}val r sum(5)// r接收到是add函数println(r)// 再传入第二参数val n r(8)println(n)// 可以第一个参数不变改变第二个参数println(r(6))// 传入两个参数val n2 sum(3)(6)println(n2)}}闭包(closure) 闭包指的是一个函数如果访问了外部变量的值那么此时这个函数以及它所处的函数构成了闭包 闭包的特点会延长外部函数中变量的生命周期 package com.fesco.functionobject ClosureDemo {def main(args: Array[String]): Unit {// 函数rand中接收了一个变量n// 正常情况下而言当rand函数执行结束之后rand函数所占用的内存应该立即释放// 因此变量n应该也立即销毁 - 此时变量n的生命周期随着函数rand的结束而结束def rand(n: Int): Int (Math.random() * n).toIntprintln(rand(10))println(rand(50))def random(n: Int) {def r() (Math.random() * n).toIntr _}// 当执行完这句话之后random函数就应该执行完了// random函数执行完成之后如果变量n随着random函数一起被销毁// 那么会导致产生嵌套的r函数无法执行所以此时n不会被销毁而是被保留// 此时n的生命周期不再随着random函数结束而结束// n的生命周期被延长这个过程就称之为闭包val result random(5)println(result())}}
http://www.zqtcl.cn/news/810850/

相关文章:

  • 网站导航设计牙科 网站建设方案
  • 手机微信网站开发教程企业网站的制作成本
  • 做电商网站的流程网站架构搭建
  • 可以下载新闻视频的网站重庆seo
  • 网站内容页设计网站建设实验分析
  • 网站建设的软硬件环境凡科精选app
  • 网站开发过滤器作用信息港怎么发布信息
  • 网站服务器组建百度seo引流怎么做
  • 南京网站定制公司如何用源码做网站
  • 网站建站视频wordpress网站好用吗
  • 网页设计网站搭建建筑材料价格信息网
  • 淮安市交通建设局网站新郑做网站
  • 新开传奇网站手机版深圳房管局官网
  • 重庆网站建设营销深圳微商城网站设计公司
  • 用织梦做的网站是模板的吗外贸展示型模板网站
  • 网站seo的关键词排名怎么做的定制和订制
  • 自适应网站做多大尺寸的四川建设厅电话网站
  • 易语言可以做网站了吗电商平台排名100强
  • 网站代码开发方式影视公司网页设计
  • 如何选择网站定制公司响水专业做网站
  • 海门建网站公司凡客模板wordpress
  • 网站关键字排名php开源cms
  • 手机商城手机网站建设多少钱明水县网站建设
  • 北京网站优化外包做板材外贸一般用哪个网站
  • 北京建设网站有哪些公司药店网站模板
  • 网站欢迎页面怎么做个人简历免费模板下载
  • 宁波外贸网站建设竣工验收报告查询网
  • 内衣网站建设详细方案如何制作企业网站的版式
  • 网站建设是否需要源代码php如何制作网站
  • 自响应式网站是什么意思现货交易平台合法的有几家