import java.util.Date
/**
* @Author jdj
* @Date 2021/3/25 2:39 下午
* @Version 1.0
*
* Scala 有方法与函数,二者在语义上的区别很小。Scala 方法是类的一部分,而函数是一个对象可以赋值给一个变量。换句话来说在类中定义的函数即是方法。
* Scala 中的方法跟 Java 的类似,方法是组成类的一部分。
* Scala 中的函数则是一个完整的对象,Scala 中的函数其实就是继承了 Trait 的类的对象。
* Scala 中使用 val 语句可以定义函数,def 语句定义方法。
*
* 方法声明
* def functionName ([参数列表]) : [return type]
* 如果你不写等于号和方法主体,那么方法会被隐式声明为抽象(abstract),包含它的类型于是也是一个抽象类型。
*
* 方法定义
* 方法定义由一个 def 关键字开始,紧接着是可选的参数列表,一个冒号 : 和方法的返回类型,一个等于号 = ,最后是方法的主体。
* def functionName ([参数列表]) : [return type] = {
* function body
* return [expr]
* }
*
* 方法调用
* Scala 提供了多种不同的方法调用方式:functionName( 参数列表 )
* 如果方法使用了实例的对象来调用,我们可以使用类似java的格式 (使用 . 号):
* [instance.]functionName( 参数列表 )
*
* 函数传名调用(call-by-name)
* Scala的解释器在解析函数参数(function arguments)时有两种方式:
* 传值调用(call-by-value):先计算参数表达式的值,再应用到函数内部;
* 传名调用(call-by-name):将未计算的参数表达式直接应用到函数内部
* 在进入函数内部前,传值调用方式就已经将参数表达式的值计算完毕,而传名调用是在函数内部进行参数表达式的值计算的。
* 这就造成了一种现象,每次使用传名调用时,解释器都会计算一次表达式的值。
*
*
* 可变参数
* Scala 允许你指明函数的最后一个参数可以是重复的,即我们不需要指定函数参数的个数,可以向函数传入可变长度参数列表。
*
* 默认参数值
*
*
* 偏应用函数
*
*
* Scala 指定函数参数名
*
*
* Scala 匿名函数
* Scala 中定义匿名函数的语法很简单,箭头左边是参数列表,右边是函数体。
* 使用匿名函数后,我们的代码变得更简洁了。
* 下面的表达式就定义了一个接受一个Int类型输入参数的匿名函数:var inc = (x:Int) => x+1
*
*
* def m(x: Int) = x + 3
* val f = (x: Int) => x + 3
*
* Scala 函数柯里化(Currying)
* 柯里化(Currying)指的是将原来接受两个参数的函数变成新的接受一个参数的函数的过程。新的函数返回一个以原有第二个参数为参数的函数。
*
*/
object FunctionName {
def main(args: Array[String]): Unit = {
var a = 3
var b = 6
addInt(a, b)
noReturn(a)
lenPr("3333", "44444", "tttt")
abcd()
var data = new Date()
var newlog = log(data, _: String)
newlog("m1")
Thread.sleep(1000)
newlog("m2")
addInt(a = 3, b = 61)
var inc = (aa: Int, bb: Int) => aa * bb
var xx = inc(33, 555)
println("xx:" + xx)
println("test:" + test(33, 4))
println("test1:" + test1(3)(44))
}
def test(vv: Int, cc: Int) = vv * cc
def test1(vv: Int)(cc: Int) = vv * cc
def addInt(a: Int, b: Int): Int = {
var sum: Int = 0
sum = a + b
println(sum)
return sum
}
def noReturn(a: Int): Unit = {
println(a)
println("Hello, Scala!")
}
def lenPr(argss: String*): Unit = {
var i: Int = 0;
for (arg <- argss) {
println("Arg value[" + i + "] = " + arg);
i = i + 1;
}
}
def abcd(v: Int = 3): Unit = {
println("vvvvv:" + v)
}
def log(date: Date, message: String): Unit = {
println(date + "------" + message)
}
}
网友评论