我已经试了:
class Foo(bar: Int)
Run Code Online (Sandbox Code Playgroud)
VS:
class Foo(private val bar: Int)
Run Code Online (Sandbox Code Playgroud)
而且他们似乎表现得一样,虽然我找不到任何地方说(bar:
Int)扩大到(private val bar: Int)所以我的问题是,这些相同/相似吗?
在旁注中,我一直在尝试使用-Xprint:typer这些代码片段,除了第二行中的额外行之外,它们产生相同的代码.我该如何阅读额外的行?
..
class Foo extends scala.AnyRef {
<paramaccessor> private[this] val bar: Int = _;
def <init>(bar: Int): this.Foo = {
Foo.super.<init>();
()
}
}
..
..
class Foo extends scala.AnyRef {
<paramaccessor> private[this] val bar: Int = _;
<stable> <accessor> <paramaccessor> private def bar: Int = Foo.this.bar;
def <init>(bar: Int): this.Foo = {
Foo.super.<init>();
()
}
}
..
Run Code Online (Sandbox Code Playgroud) 如果您正在编写使用大量漂亮,不可变数据结构的代码,则案例类似乎是天赐之物,只需一个关键字即可免费为您提供以下所有内容:
但是将不可变数据结构定义为案例类有什么缺点?
它对班级或其客户有什么限制?
您是否应该选择非案例类?
我有一个非常简单的问题 - 在Scala中创建对象时应该何时应用new关键字?是在我们尝试仅实例化Java对象时?
我有以下代码.编译时我得到一个错误说
value email is not a member of Player
class Player(email: String)
{
override def equals(player: Any): Boolean = {
player match {
case p: Player => email.equals(p.email)
case _ => false
}
}
}
Run Code Online (Sandbox Code Playgroud)
我是一名尝试Scala的Java程序员,无法弄清楚为什么会出现这个错误(据我所知,email是播放器实例的成员).有人可以给出解释以及如何解决这个问题吗?
试图了解Scala的基本概念.因此,每次使用关键字"new"实例化Class时,我们都会获得一个新对象.使用object关键字声明的单个对象无法使用关键字"new"进行实例化,因为只能有一个.从某种意义上说,它是在编译时实例化的.
Int是一个案例类吗?5.07是Double的案例类吗?
4是一个对象吗?
类本身有时候,还是总是对象?
功能是对象.他们也是课程的实例?这如何组合在一起?
Scala是纯粹的面向对象的Smalltalk还是它在OO前端做出了一些妥协?
我知道我们不能通过自己定义apply()伴随对象上的方法来获得这种效果,但出于所有目的,我最终在Scala代码库中看到的唯一事情就是每个人都只为每个类定义apply()方法,从而导致很多样板代码.
例如,F#将允许默认情况下没有new的对象的实例化(除了一次性用品).
这个决定有什么理由吗?
已经有一段时间了,因为我完全使用了构造函数 - 当我必须在Scala中使用构造函数时,我自然会遇到麻烦.
我想要做以下事情:当我创建一个没有通过任何东西的新类时,它会创建一个空向量.
否则,如果它通过向量 - 我们使用该向量并定义它以与类一起使用.
我该怎么做呢?我以前有过
Class example{
val a: Vector[int] = Vector();
Run Code Online (Sandbox Code Playgroud)
然后我迷路了.我在考虑做类似的事情
Class example{
val a: Vector[Int] = Vector()
def this(vector: Vector[Int]){
this{
a = vector
}
}
Run Code Online (Sandbox Code Playgroud)
但是我遇到了很多错误.有人可以帮忙吗?我正在尝试找到我的scala书但我找不到它 - 我知道它有一个很好的关于构造函数的部分.
在 Scala 中,类参数如何不是真正在对象上调用的值?类参数是主构造函数的一部分,所以它不应该像 Java 那样设置对象的成员变量吗?为什么我们必须制作单独的字段,这些字段是在对象上设置的值?与其只是接受事实,还有什么好的解释吗?
scala ×8
case-class ×1
constructor ×1
equals ×1
java ×1
keyword ×1
new-operator ×1
oop ×1
smalltalk ×1