相关疑难解决方法(0)

scala中Array和List之间的区别

在什么情况下我应该使用Array(Buffer)和List(Buffer).我所知道的唯一区别是数组是非变量的,列表是协变的.但是性能和其他一些特性呢?

arrays scala list scala-collections

129
推荐指数
3
解决办法
6万
查看次数

我怎么样*要使用scala.collection.immutable.Queue?

我有我认为处理队列最常见的情况.我将读取队列的前面,对元素执行操作(这可能会导致更多元素添加到队列中),然后循环直到队列为空.

  1. 我的第一直觉是foreach,但是没有,显然一个队列(甚至是一个可变的队列)是严格的,并且当迭代开始时,foreach循环遍历队列中的所有元素.
  2. 我无法弄清楚while循环的语法.

你会认为它会是这样的

while (!q.isEmpty) {
   var (e, q) = q.dequeue
   ... }
Run Code Online (Sandbox Code Playgroud)

会工作,除了我重新宣布q.这确实有效:

while (!q.isEmpty) {
   var (e, q1) = q.dequeue
   q = q1
   ... }
Run Code Online (Sandbox Code Playgroud)

但男人,看起来不对 ......

scala

22
推荐指数
3
解决办法
8289
查看次数

是否有可能以及如何设置只能设置一次的var?

是否有一种本地方法可以确保变量只能设置一次?

目前,我正在使用这种方法

class SetOnceVariable[T]
{
  private var value : T = _

  private var initialized = false

  def apply(_v : T = _) : T =
  {
    if (value != null && !initialized) {
      value = _v
      initialized = true
    }
    value
  }
}

class ClientInfo
{
  val userIP : SetOnceVariable[String] = new SetOnceVariable[String]
}
Run Code Online (Sandbox Code Playgroud)

scala

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

Scala vals可以修改

我开始玩Scala,我读到的第一件事就是vals:

分配一次且永不改变的变量,以及可能在其生命周期内发生变化的变量

但我很好奇为什么我能做到这一点:

val foo = Array(1, 3 ,2)
scala.util.Sorting.quickSort(foo)
Run Code Online (Sandbox Code Playgroud)

如果我检查foo变量现在是有序的,这意味着它已经改变了......如果我打印(foo),两者都有相同的,所以变量指向同一个对象(我本可以认为变量只是指向一个新对象)

任何人都可以澄清吗?

scala

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

如何增加传递给Scala函数的整数变量?

我在函数外声明了一个变量,如下所示:

var s: Int = 0
Run Code Online (Sandbox Code Playgroud)

通过它如下:

def function(s: Int): Boolean={

   s += 1

   return true

}
Run Code Online (Sandbox Code Playgroud)

但是对于我的生活,错误线不会在"s + ="之下消失.我尝试了一切.我是Scala bww的新手.

scala parameter-passing immutability

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

将可变对象设置为'val'意味着什么?

我将java Pojo实例变量设置为'val'并在初始化后更改其状态.这会引起任何问题,因为它真的是'var'吗?

val st = new Pojo();
st.setInt(0);
Run Code Online (Sandbox Code Playgroud)

scala

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

在Scala中使用def或var声明一个函数

我试图找出在Scala中声明函数时def和之间的区别var/val.

假设我们有一个功能:

scala> def f(x: Int) = { x * 2 }
f: (x: Int)Int
Run Code Online (Sandbox Code Playgroud)

另一个功能g:

scala> var g = (x:Int) => x*2
g: Int => Int = <function1>
Run Code Online (Sandbox Code Playgroud)

显然它们在以下方面是相同的:

scala> f(2)
res0: Int = 4

scala> g(2)
res1: Int = 4
Run Code Online (Sandbox Code Playgroud)

但是,我能做到

g = f
g: Int => Int = <function1>
Run Code Online (Sandbox Code Playgroud)

但不是

scala> f = g
<console>:13: error: missing arguments for method f;
follow this method with `_' if you want to treat it as …
Run Code Online (Sandbox Code Playgroud)

scala

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

Scala不可变集是可变的吗?

文档说:

保证scala.collection.immutable包中的集合对每个人都是不可变的。这样的集合在创建后将永远不会改变

但是我没有得到我期望的行为:

scala> var test3 = scala.collection.immutable.Set[String]("one", "two")
test3: scala.collection.immutable.Set[String] = Set(one, two)

scala> test3 += "three"

scala> println(test3)
Set(one, two, three)
Run Code Online (Sandbox Code Playgroud)

我在这里想念什么?

scala set immutable-collections

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

为什么不应该在函数式编程中使用变量赋值

我正在学习函数式编程,我能理解为什么不变性比可变对象更受欢迎。

这篇文章也解释的很好。

但我无法理解为什么应该在纯函数内部执行赋值。

我能理解的一个原因是变量可变性导致锁定,因为在 Scala 中的纯函数中,我们主要是尾递归,这会在调用堆栈而不是堆上创建变量/对象。

在函数式编程中应该避免变量赋值还有什么其他原因。

functional-programming scala

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

为什么scala中的每个迭代参数都是val而不是var for for循环

我是Scala初学者并开始经历"Scala编程".我遇到了以下代码.

for (arg <- args)
println(arg)
Run Code Online (Sandbox Code Playgroud)

在书中它说arg是val类型而不是var.为什么会如此.

根据我对每次迭代的理解,arg的值会发生变化,因为每次循环时它都会保持新的值.

以下是我的问题

  1. 为什么是arg val而不是var?
  2. 根据Scala,如果是val,我们无法更改值(因为它在Scala中是最终的)
  3. 它还会为每次迭代创建多个对象以及循环后对象如何被销毁?

我也知道scala中var和val之间的区别.我已经看过这个链接.Scala中var和val定义有什么区别?

for-loop scala

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