第十六天函数

packagecom.learn.scala.day16

importscala.math._

/**

* 第十六天函数

* Created by zhuqing on 2017/3/17.

*/

objectDay16Function {

defmain(args: Array[String]): Unit = {

/**

* 函数可以赋值给一个变量

* 函数有apply方法

*/

valtriple = (x: Double) =>3* x

/**

* 实际是:triple.apply(4)

*/

println(triple(4))

/**

* 10*3

*/

countTen(triple)

/**

*

* 10-5

*/

countTen((x: Double) => x -5)

/**

* 自动推断x为Double类型

*/

countTen((x) => x -5)

/**

* 自动推断“_”为第一个参数

*/

countTen(_ -5)

/**

* 是否math包下的方法

* _把方法转成函数

*/

countTen(sqrt_)

/**

* multiplyBy(3); 返回 函数(x:Double)=> 3*x;

*/

valtriple2 =multiplyBy(3)

/**

* 3*10

*/

println(triple2(10))

/**

* 把柯里化方法multiply 赋值给变量

* 柯里化:将原来接受两个参数的函数变成新的接受一个参数的函数的过程。

* 新的函数返回一个以原有第二个参数作为参数的函数

* 在这里:triple3=3*y

*/

valtriple3 =multiply(3) _

println(triple3(10))

println(indexOf("hello",'o'))

}

/**

* 函数可以作为方法的参数

* 作为参数的函数必须是参数为Double类型,返回值为double类型

*

*@param f

*@return

*/

defcountTen(f: (Double) => Double) = {

println(f(10))

}

/**

* 函数作为返回值

* 这是一个闭包:绑定了变量的函数。

*

*@param factor

*@return

*/

defmultiplyBy(factor: Double) = {

(x: Double) => factor * x;

}

/**

* 可柯里化的方法,功能与multiplyBy方法一样

*-    *  def multiply(x:Double)=(y:Double)=>x*y

*

*@param x

*@param y

*@return

*/

defmultiply(x: Double)(y: Double) = x * y

/**

* scala 不提倡在方法中使用return

* 但是有时候不得不使用

*

*@param str

*@param ch

*@return

*/

defindexOf(str:String, ch: Char): Int = {

for(i <-0until str.length) {

valc = str.charAt(i)

if(c == ch) {

returni;

}

}

-1

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容