第一次使用,晕菜了_(¦3」∠)_
目录
1、=>的用法
1.1 匿名函数
object Hello extends App{
var userDir = () => { System.getProperty("user.dir") }
println( userDir() ) //yourpath
// mul这时候相当于一个函数啦,给函数传x,y参数,执行x*y的动作
var mul = (x: Int, y: Int) => x*y
println(mul(3, 4)) //12
// 无传入参数
var test = () => {println("无传入参数的测试")}
println(test)
// Hello$$$Lambda$19/0x00000001000c6c40@3ecd23d9
// 至于结果为什么是这样的,我还不清楚。。。
}
1.2 按名调用(By-Name Parameters)
Scala 中允许使用高阶函数, 高阶函数可以使用其他函数作为参数,或者使用函数作为输出结果。
object ByName {
def main(args: Array[String]) {
println( apply( layout, 10) )
}
// 函数 f 和 值 v 作为参数,而函数 f 又调用了参数 v
def apply(f: Int => String, v: Int) = f(v)
def layout[A](x: A) = "[" + x.toString() + "]"
}
// [10]
上图换成Boolean就编译失败了。。。
1.3 表示函数的类型
题外话(scala中函数和方法真的有不一样)Scala method(方法) 和 functio(函数) 的区别
暂时我还没有用到(*^▽^*)
1.4 模式匹配(case语句)
在模式匹配 match 和 try-catch 都用 “=>” 表示输出的结果或返回的值
object MatchTest extends App {
def matchTest(x: Int): String = x match {
case 1 => "one"
case 2 => "two"
case _ => "many"
}
println(matchTest(3))
}
// many
// 这段代码也可以看出,scala并不需要main方法
2、<- 的用法
<- 只会出现在for循环里面。
// foreach循环,可变参数的循环
def printStrings( args:String* ) = {
var i : Int = 0;
for( arg <- args ){
println("Arg value[" + i + "] = " + arg );
i = i + 1;
}
}
// for (i <- 1 to 10) //普通循环
// println(i + " 的阶乘为: = " + factorial(i) )
3、->的用法
只会出现在k->v里面。
object Test {
def main(args: Array[String]) {
val colors = Map("red" -> "#FF0000",
"azure" -> "#F0FFFF",
"peru" -> "#CD853F")
val nums: Map[Int, Int] = Map()
println( "colors 中的键为 : " + colors.keys )
println( "colors 中的值为 : " + colors.values )
println( "检测 colors 是否为空 : " + colors.isEmpty )
println( "检测 nums 是否为空 : " + nums.isEmpty )
}
}
/*
colors 中的键为 : Set(red, azure, peru)
colors 中的值为 : MapLike(#FF0000, #F0FFFF, #CD853F)
检测 colors 是否为空 : false
检测 nums 是否为空 : true
*/
后续还有
上界 <:, 下界>:, 视界 <%, 边界 :, 协变 +T, 逆变-T
可怕。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
以上内容参考:
使用scala写排序:https://github.com/TheAlgorithms/Scala/blob/master/src/main/scala/Sort/HeapSort.scala