scala参数传递

在编程语言中,参数传递有多种方式,比如c++中的传递地址和传递数值。在scala中多了一种名称传递

Call-by-Name: => Type

名称传递表示传递的参数名称会替代函数中的参数名称。
我们举个例子

def f(x: => Int) = x * x

=>int表示一个代码块,最终返回Int

通过以下代码调用函数f

var y = 0
f { y += 1; y }

{ y += 1; y }会替代x

{ y += 1; y } * { y += 1; y }

这时会出现一个问题,名称冲突,scala中,函数参数中的标识符名称不能引用或遮盖名称,执行顺序如下。

{ y += 1; y } * { y += 1; y } = 2* {y+=1;y} = 2* 3=6
                                ^ 
                                y=2
                                                 ^
                                                 y=3

无参函数 () => Type

这种形式的函数不带有参数, 比如size()返回一个数值. 注意它与匿名函数的区别,虽然它们很相似。

() => println("I'm an anonymous function")

这是一个无参匿名函数,它的类型是Unit

() => Unit

所以我们可以定义一个无参函数

val f: () => Unit = () => println("I'm an anonymous function")

Unit => Type

def f(x: Unit) = ...

call by value

def foo(code : Int) {
    println("Parameter already evaluated")
    val result = code
    println("parameter evaluated : " + result)
}

http://blog.csdn.net/ssjssh/article/details/12126477
https://github.com/vkostyukov/scalacaster

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值