scala - 关于 scala 私有(private)字段变量的困惑

标签 scala

我正在学习 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/

相关文章:

function - 如何在 Scala 中的案例类中添加自定义行为以复制函数?

java - Spark 作业在 takeSample 上用完堆内存

scala - 从嵌套选项中提取值

scala - list 与类 list 。这个 Scala 错误是什么意思?

scala-guice 和辅助注入(inject)

string - 重载方法调用有替代 : String. 格式

scala - 为了使编译速度更快,...更少的特征有吗?

scala - 如何匹配路由中的特定接受 header ?

scala - 奇怪的 Scala 'Type mismatch' 元组错误

swift - 如何快速复制一个只有一个不同字段的结构