相关疑难解决方法(0)

scala构造函数参数默认为private val吗?

我已经试了:

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 scala-primary-constructor

119
推荐指数
2
解决办法
3万
查看次数

声明Scala案例类有哪些缺点?

如果您正在编写使用大量漂亮,不可变数据结构的代码,则案例类似乎是天赐之物,只需一个关键字即可免费为您提供以下所有内容:

  • 默认情况下一切都是不可变的
  • Getters自动定义
  • Decent toString()实现
  • 兼容的equals()和hashCode()
  • Companion对象使用unapply()方法进行匹配

但是将不可变数据结构定义为案例类有什么缺点?

它对班级或其客户有什么限制?

您是否应该选择非案例类?

scala case-class

103
推荐指数
4
解决办法
2万
查看次数

Scala中的"new"关键字

我有一个非常简单的问题 - 在Scala中创建对象时应该何时应用new关键字?是在我们尝试仅实例化Java对象时?

scala keyword new-operator

89
推荐指数
2
解决办法
3万
查看次数

在Scala中覆盖equals方法

我有以下代码.编译时我得到一个错误说

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是播放器实例的成员).有人可以给出解释以及如何解决这个问题吗?

java scala equals

2
推荐指数
2
解决办法
3258
查看次数

Scala类,对象,案例类,文字

试图了解Scala的基本概念.因此,每次使用关键字"new"实例化Class时,我们都会获得一个新对象.使用object关键字声明的单个对象无法使用关键字"new"进行实例化,因为只能有一个.从某种意义上说,它是在编译时实例化的.

Int是一个案例类吗?5.07是Double的案例类吗?

4是一个对象吗?

类本身有时候,还是总是对象?

功能是对象.他们也是课程的实例?这如何组合在一起?

Scala是纯粹的面向对象的Smalltalk还是它在OO前端做出了一些妥协?

oop scala smalltalk

1
推荐指数
1
解决办法
561
查看次数

为什么Scala不允许在不使用"new"运算符的情况下实例化类?

我知道我们不能通过自己定义apply()伴随对象上的方法来获得这种效果,但出于所有目的,我最终在Scala代码库中看到的唯一事情就是每个人都只为每个类定义apply()方法,从而导致很多样板代码.

例如,F#将允许默认情况下没有new的对象的实例化(除了一次性用品).

这个决定有什么理由吗?

scala

1
推荐指数
1
解决办法
150
查看次数

Scala中构造函数的问题

已经有一段时间了,因为我完全使用了构造函数 - 当我必须在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书但我找不到它 - 我知道它有一个很好的关于构造函数的部分.

constructor scala

0
推荐指数
2
解决办法
99
查看次数

为什么不在 Scala 中的对象上调用类参数?

在 Scala 中,类参数如何不是真正在对象上调用的值?类参数是主构造函数的一部分,所以它不应该像 Java 那样设置对象的成员变量吗?为什么我们必须制作单独的字段,这些字段是在对象上设置的值?与其只是接受事实,还有什么好的解释吗?

scala

0
推荐指数
1
解决办法
61
查看次数