我正在学习 Scala 的第三天。使用书“begin scala”。
作者用一个例子来展示带 val var 和不带 var val 的变量定义之间的区别:
class Book(private val title: String) {
def printTitle(b: Book) {
println(b.title)
}
}
在控制台中:
scala> val book = new Book("Beginning Scala")
book: Book = Book@ea05be
scala> book.printTitle(new Book("Beginning Erlang"))
Beginning Erlang
这里让我困惑的不是有/没有 val var,而是 private 修饰符:
我不确定我是否理解私有(private)权,但是如果scala想要标题作为私有(private)字段,那么为什么它允许其他人从外部访问它,我想prinTitle 不应该能够访问 new Book("Beginning Erlang") 的标题字段
最佳答案
值title
对于类来说是私有(private),而不是实例,因为方法printTitle
是类的成员,所以它可以访问其他实例的私有(private)值。
如果您希望 title
对实例私有(private),则可以使用 private[this]
修饰符。
此外,private[package]
修饰符(其中 package
是定义所在的包的名称)可以与包共享私有(private)成员。例如
package com.sample.foo
class Book(private[foo] title: String)
可以访问包com.sample.foo
中的所有代码
关于scala - 关于 scala 私有(private)字段变量的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31956486/