Scala : 作用域中的变量,容器
April 25th, 2010
No comments
Functions Bound to Variables in Scope
函数被绑定到创建函数时所在的作用域内中的变量,这样就允许承载状态,例如首先声明一个名为 foo 的变量:
scala> val foo = "dog" foo: java.lang.String = dog
下面创建一个引用了这个变量的函数:
scala> val whoTo = (s: String) => s+" "+foo whoTo: (String) => java.lang.String = <function1>
调用这个函数:
scala> whoTo("I love my")
res0: java.lang.String = I love my dog
scala> whoTo("I walk my")
res1: java.lang.String = I walk my dog
函数可以绑定于vars 或 vals ,甚至可以修改vars,首先,创建一个var strs,它是一个 List[String]:
然后创建一个以String为参数并返回String的函数,并且它能修改strs:
scala> var strs: List[String] = Nil
strs: List[String] = List()
scala> val strF = (s: String) => {strs ::= s; s+" Registered"}
strF: (String) => java.lang.String = <function1>
调用这个函数:
scala> strF("a")
res2: java.lang.String = a Registered
scala> strF("b")
res3: java.lang.String = b Registered
scala> strs
res4: List[String] = List(b, a)
把这个函数作为参数:
scala> List("p", "q", "r").map(strF)
res5: List[java.lang.String] = List(p Registered, q Registered, r Registered)
scala> strs
res6: List[String] = List(r, q, p, b, a)
可以看到每一步都正确地更新了 strs。
评论