Scala的常见应用

一、递归函数定义

   def ji(n: Int): Int = {
      if (n == 1) 1
      else n * ji(n - 1)
    }
    println(ji(5))

二、指定参数名传参

def Test1(name:String,age:Int):Unit={
      println("姓名:"+name+",年龄"+age)
    }
    Test1(age = 14, name = "tom")

三、匿名函数改名

val abc: (Int, Int) => Int = (a, b) => a + b
    val bca = abc
    println(bca(3, 5))

四、函数作为参数传递

def Test(num1: Int, num2: Int, fun: (Int, Int) => Int): (Int, Int) => Int = {
      if (fun(num1, num2) % 2 == 0) (a, b) => a + b
      else (a, b) => a - b
    }
    println(Test(12, 21, (a, b) => a * b)(45, 76))

五、隐式函数

package cn.kgc.kb11

object Impliciteg {
  //隐式方法的定义
  implicit def stringToInt(value: String): Int = Integer.parseInt(value)

  implicit def doubleToInt(value: Double): Int = value.toInt

  implicit def floatToInt(value: Float): Int = value.toInt

  implicit val num: Int = 10
  implicit val name: String = "green"

  implicit def intToString(value: Int): String = {
    println("传入的数据是:" + value)
    value.toString + "hehe:haha"
  }

  implicit class NumOperation(demo: Demo1) {
    def sum(a: Int, b: Int): Int = {
      println("a value" + a)
      println("b value" + b)
      a + b
    }

    def ji(a: Int, b: Int): Int = {
      a * b
    }
  }

}
package cn.kgc.kb11

import cn.kgc.kb11.Impliciteg._

class Demo1{

}

object Demo1 {
  def main(args: Array[String]): Unit = {
    val demo1 =new Demo1
    val result = demo1.sum(3,4)
    val result1 = demo1.ji(5,6)
    println(result)

        val a: Int = "3"
    val b: Int = 5.5
    val c: Int = 3.4f

    val d:String = 456
    println(d)
    //调用方法的时候,传参 > 隐式值 > 默认值
    //    implicit val num1:Int=11

    //三个传参
    implicit val num: Int = 12

    def sum(a: Int)(implicit b: Int = 5,name:String): Int = {
      println(name)
      a + b
    }
    println(sum(20)(10,"tom"))
  }
}
Scala中的泛型(Generics)是一种强大的工具,允许开发者编写可重用的代码,同时保持类型安全。泛型在Scala中有多种应用场景,以下是一些常见应用场景: 1. **集合类**: Scala的集合类(如List、Set、Map等)广泛使用了泛型。例如,List[Int]表示一个包含整数的列表,List[String]表示一个包含字符串的列表。通过泛型,集合类可以存储任意类型的元素,而不会丢失类型信息。 ```scala val intList: List[Int] = List(1, 2, 3) val stringList: List[String] = List("a", "b", "c") ``` 2. **函数参数**: 泛型可以用于定义接受任意类型参数的函数。例如,定义一个通用的排序函数,可以对任何类型的列表进行排序。 ```scala def sortList[T](list: List[T])(implicit ord: Ordering[T]): List[T] = { list.sorted } val sortedIntList = sortList(intList) val sortedStringList = sortList(stringList) ``` 3. **类定义**: 在定义类时,可以使用泛型来创建通用的数据结构。例如,定义一个通用的键值对类,可以存储任意类型的键和值。 ```scala class Pair[K, V](val key: K, val value: V) { def getKey: K = key def getValue: V = value } val pair = new Pair(1, "one") println(pair.getKey) // 输出: 1 println(pair.getValue) // 输出: one ``` 4. **类型约束**: 泛型还可以用于在编译时对类型进行约束。例如,定义一个函数,要求传入的参数必须是某个类的子类。 ```scala def printLength[T <: { def length: Int }](obj: T): Unit = { println(obj.length) } printLength("hello") // 输出: 5 printLength(List(1, 2, 3)) // 输出: 3 ``` 5. **隐式参数**: 泛型可以与隐式参数结合使用,提供更灵活的代码。例如,定义一个通用的函数,依赖于隐式参数来实现特定的功能。 ```scala def printValue[T](value: T)(implicit ev: T => String): Unit = { println(value) } implicit def intToString(i: Int): String = i.toString printValue(123) // 输出: 123 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值