加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

scala学习之update

发布时间:2020-12-13 21:08:35 所属栏目:PHP教程 来源:网络整理
导读:update: 当带有括号并包括1到多个参数进行赋时,编译器将使用对象的update方法对“括号里的参数和等号右侧的”履行调用 val scores = new scala.collection.mutable.HashMap[String,Int] scores(Bob) = 100 val bobsScore = scores(Bob) 以上3行代码,我们创

update:  当带有括号并包括1到多个参数进行赋值时,编译器将使用对象的update方法对“括号里的参数和等号右侧的值”履行调用

val scores = new scala.collection.mutable.HashMap[String,Int]
scores("Bob") = 100
val bobsScore = scores("Bob")

以上3行代码,我们创建了1个可变的map来存储得分情况,然后我们记录了Bob的得分是100分,最后我们又把Bob的分数取出来了。
这3行代码看似平淡无奇,实则隐藏了1点点玄机。
第2行实际是调用了HashMap的update方法。
第3行实际是调用了HashMap的apply方法。
我们可以把上面的代码改写成下面的等价情势:

val scores = new scala.collection.mutable.HashMap[String,Int]
scores.update("Bob",100)
val bobsScore = scores.apply("Bob”)


class SomeClass {  
    defupdate(arg1:Int,arg2:String,arg3:String):String ={  
        println("update method called")  
        arg1+ "|"+ arg2+ "|"+ arg3  
    }  
}     
val obj =new SomeClass  
val result =(obj(1,"key1")="Hello")  
println(result)  

履行后输出结果为:
update method called
1|key1|Hello

利用 update 时,等号右侧的值会作为 update 方法的最后1个参数。


update方法的适用处:

class AddressChanger {
  def update(name: String,age: Int,newAddress: String) = {
    println(s"changing address of $name,whose age is $age to $newAddress")
    //actually change the address
  }
}

我们可以这样来调用它:
val changer = new AddressChanger()
changer.update("xiao ming",23,"beijing")


或,我们也能够这样来调用它:
val addressOf = new AddressChanger()
addressOf(name = "xiao ming",age = 23) = "beijing"

结果:

changing address of xiao ming,whose age is 23 to beijing


这两段代码是等价的。
比较1下,前1种用法显得中规中矩,没甚么特别好的,也没啥特大的毛病。
可是后1种用法就不同了,读起来很通顺,有读英语语句的感觉:把名字叫做小明,年龄23岁的人的地址改成北京。
如果再给AddressChanger加上1个apply方法,我们还可以写这样的代码:

val currentAddress = addressOf(name = "xiao ming",age = 23)


这样,读取和更新的代码都看起来非常自然。
如果我们把这两段代码连起来看:
val currentAddress = addressOf(name = "xiao ming",age = 23)
addressOf(name = "xiao ming",age = 23) = "beijing"

感觉甚好。
addressOf(name = “xiao ming”,age = 23)可以看作1个整体,它就犹如1个可读可写的属性。
我们把它放到赋值语句的右边,就可以取到小明确当前住址。
我们把它放到赋值语句的左边,就可以修改小明的住址。
apply和update都是蛮简单的语言特性,但是加以适合的利用,却能得到可读性极强的代码。


(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读