[scala] scala 函数 (⑦)

1.scala 函数定义

2.scala 高阶函数

3.匿名函数

4.柯里化

import scala.math._

/**
  * @author xwolf
  * @date 2017-04-24 9:57
  * @since 1.8
  */
class Function {
   // _ 将round 方法转化为函数
   val  cel = round _

   def add(x:Int,y:Int) = x+y

   //函数
   def f(x : => Int) = x.+(3)

   def m (r : => Double) = {
      val rs=(Math.PI*r*r*0.5)
      rs}

   //高阶函数
   def a(s:(Int)=>Int,z:Int)= s(z)+this.f(z)

   //匿名函数定义
   val minus = (m:Int) => m-1

   // 柯里化函数定义
   def ads(x:Int)=(y:Int) => x*y

   //阶乘 (递归实现)
   def sm(x:Int):BigInt={
      if (x==1 || x==0) 1
      else sm(x-1)*x
   }

   //阶乘 (reduceLeft 实现)
   def rsm(x:Int):BigInt={
      (1 to x).reduceLeft(_ * _)
   }

   // 求数组的最大值
   def max(ary :Array[Int]):Int={
      ary.reduceLeft(_ max _)
   }

   // 求数组的最大值
   def getMax(ary :Array[Int]):Int={
      //底层也是reduceLeft
      ary.max
   }
}

测试:

object FunctionTest {

  def main(args: Array[String]): Unit = {

    val function = new Function
    val cel = function.cel(32)
    println(cel)
    val a = function.f(1)
    println(a)
    val b = function.add(12,32)
    println(b)
    val c = function.m(2.4)
    println(c)

    val d = function.minus(3)
    println(d)
    //柯里化
    val e = function.ads(2)(10)
    println(e)

    val f = function.sm(5)
    println(f)

    val f2 = function.rsm(5)
    println(f2)

    val ary =Array(3,32,4,2,2)
    val g =function.getMax(ary)
    println(g)

    //高阶函数使用
    val af = function.a(a=>4,3)
    print(af)
  }

}

  

  

时间: 2024-12-11 13:08:53

[scala] scala 函数 (⑦)的相关文章

Scala匿名函数语法

Scala中定义匿名函数的语法是相当轻量的.下面的表达式就定义了一个接受一个Int 类型输入参数的匿名函数: 上述定义的匿名函数,其实是下面这种写法的简写: 简单调用如下: 我们当然也可以定义多个参数的匿名函数: 多参数使用Function语法来定义如下   也可以定义没有参数的匿名函数: 匿名函数的Function语法的实现如下:   用来表示上述三个匿名函数(一个参数,两个参数,无参数)的函数类型也很简单 上述三个函数的函数类型分别表示如下: Int => Int (Int,Int) =>

在Scala中函数和方法有什么区别

方法可以作为一个表达式的一部分出现(调用函数并传参),但是方法(带参方法)不能作为最终的表达式, 但是函数可以作为最终的表达式出现: scala> //定义一个方法 scala> def m(x:Int) = 2*x m: (x: Int)Int scala> //定义一个函数 scala> val f = (x:Int) => 2*x f: Int => Int = <function1> scala> //方法不能作为最终表达式出现 scala&g

Scala应用函数

我们使用“_” 来代替单个的参数,实际上你也可以使用“_”来代替整个参数列表,比如说,你可以使用 print _ 来代替 println (_). someNumbers.foreach(println _) Scala编译器自动将上面代码解释成: someNumbers.foreach( x => println (x)) 因此这里的“_” 代表了Println的整个参数列表,而不仅仅替代单个参数. 当你采用这种方法使用“_”,你就创建了一个部分应用的函数(partially applied

scala之函数是个什么鬼。

scala除了方法外还支持函数,方法是对对象进行操作,而函数不是.(类型与java中静态方法,妈蛋,好歹也写过C和C++这还理解不深刻了).除此之外,写法一样. object add{ //指定返回值类型,返回的值不需要使用return指定,会取最后一个表达式的值. def abs(x:Double):Double = if(x>=0) x else -x //函数体需要多个表达式完成,就用代码块咯,代码块特性看代码块知识点咯.算了,跟你提示一下,会取最后一个表达式的值. def addInt(

scala 基础四 scala 的函数扩展 默认参数,不定长参数,带名参数

默认参数,默认参数就是在函数定义的时候直接给函数的入参进行赋值 package smart.iot class func { } object func { //参数默认值 格式 参数:参数类型="要设置的默认值" def funcadd(str:String="hello scala!") { println(str); } def main(args: Array[String]): Unit = { funcadd() } } 输出:hello scala!

Scala的函数

 3.   FP 3.1.     函数 函数的地位和一般的变量是同等的,可以作为函数的参数,可以作为返回值. 传入函数的任何输入是只读的,比如一个字符串,不会被改变,只会返回一个新的字符串. Java里面的一个问题就是很多只用到一次的private方法,没有和使用它的方法紧密结合:Scala可以在函数里面定义函数,很好地解决了这个问题. 3.1.1.  函数定义 函数和方法一般用def定义:也可以用val定义匿名函数,或者定义函数别名. def m0(x:Int) = x*x val m1

[Notes] 简单的 Scala 尾递归函数

以斐波那契数列的计算函数为例, 实践 Scala 中尾递归函数的编写 object Test extends App { def fib(n: Int): Int = { @annotation.tailrec def fib_iter(f0: Int, f1: Int, cnt: Int): Int = if (cnt <= 0) f0 else fib_iter(f1, f0+f1, cnt-1) fib_iter(0, 1, n) } (0 until 10).foreach { n =>

scala基础&amp;函数

基础的scala语法和函数 package com.yjm.scala object Person { def main(args: Array[String]): Unit = { } var age = 20 if (age > 20) { println("可以观看欧美") } else if (age > 18) { println("可以看国产") } else { println("禁止观看") } var count =

scala中函数简单使用记录

object funcHighLevel { def main(args: Array[String]): Unit = { // 创建一个匿名函数 val sayFunc = (name: String) => println("hello ," + name) // 定义一个方法传入一个函数 def greeting(func: (String) => Unit, names: String) { func(names) } // 在定义一个 name,age是参数 v