当前位置: 首页 > 知识库问答 >
问题:

scala中FOR表达式中的val

薛俊美
2023-03-14
for(counter <- 1 to 10) println(counter)

变量计数器是什么类型的?var或val。

答案是Val。现在显而易见的问题是,如果是Val,那么输出是0,。。。,9.这意味着“计数器”变量的值在每次迭代中都会发生变化,即计数器每次都会被重新分配到不同的值。

“计数器”变量的值在每次迭代中都会改变”--正确的“计数器每次都被重新分配到不同的值”--错误

哎呀。怎么可能?让我们看看JVM是如何工作的(对于scala和java)

x=new水果(“苹果”)(水果是一个类,有一个名为name的属性)

现在我如何得到x的新值,有两种方法。为了理解这一点,我们将在创建对象时很少讨论内存。在这种情况下,对象将在堆内存中创建,值为“Apple”,地址为“xxxx”。x将与值“xxx”一起出现在堆栈中。现在,同一个对象也可以被其他对象引用,比如y=x。因此,这两个对象都指向具有值“Apple”的同一个对象。现在我创建了一个新对象z=newstring(“香蕉”)。

得到x的新值

  1. y、 name=“橙色”--

如果x是val(java中的final),那么方法2是不可能的,但是方法1是可以的。所以结论是,如果您声明了一个val或final(在java中),那么您不能将该ref重新分配给一个新的ref,但可以修改指向的对象。如果ref(“xxx”)的值为val.for(计数器),则无法更改该值

scala中的“FOR”也是一个表达式,而不是一个语句。区别在于。表达式总是返回一些东西,但语句从不返回任何东西。(scala中的while和do-while是语句)

如果有人有其他意见请告诉我


共有1个答案

卫鸿朗
2023-03-14
匿名用户

答案是,for只是foreach高阶函数的语法糖。首先,什么是1到10?!好的,这是scala。收集不变的范围Inclusive=范围(1,2,3,4,5,6,7,8,9,10)。

for实际上是从1到10的范围内的foreach调用。它与

<代码>范围(1, 2, 3, 4, 5, 6, 7, 8, 9, 10). foreach(count=

当我们在foreach上进行计数时,根本没有赋值,让我们看看foreach在范围上的定义:

def foreach[U](f: Int=

foreach接受函数作为参数,参数必须是具有Int类型参数且不返回任何内容的函数,所以这里的count只是一个参数名,scala中的参数默认为val

 类似资料:
  • 本文向大家介绍详解Java中的scala正则表达式,包括了详解Java中的scala正则表达式的使用技巧和注意事项,需要的朋友参考一下 Scala 通过 scala.util.matching 包中的 Regex 类来支持正则表达式。 eg:使用正则表达式查找单词 Scala 实例中使用 String 类的 r() 方法构造了一个Regex对象。(也可直接new一个Regex对象实例)然后使用 f

  • 主要内容:实例,实例,实例,正则表达式,正则表达式实例,实例Scala 通过 scala.util.matching 包中的 Regex 类来支持正则表达式。以下实例演示了使用正则表达式查找单词 Scala : 实例 import scala. util. matching. Regex object Test {     def main (args : Array [String ] ) {       val pattern = "Scala". r

  • Scala 通过 scala.util.matching 包中的 Regex 类来支持正则表达式。以下实例演示了使用正则表达式查找单词 Scala : import scala.util.matching.Regex object Test { def main(args: Array[String]) { val pattern = "Scala".r val

  • 问题内容: 有没有办法让AngularJS在模型数据中评估表达式? HTML: 模型: 最终结果将是:。 问题答案: 您可以使用该服务来插值字符串… JSFiddle

  • 问题内容: 此代码用于列出当前文件夹中名称为“ abc”,“ 123”或“ a1b”的文件。 我将如何使用一个glob来执行此功能?谢谢! 问题答案: 最简单的方法是自己过滤全局结果。这是使用简单循环理解的方法: 您也可以使用regexp而不使用: (顺便说一句,命名变量是一个坏主意,因为它是Python类型…)

  • 我有下面的数据模型,稍后我将对其进行模式匹配: A是层次结构的抽象超类型。C是a的具体子类。a的其他具体子类是B的子类,B又是a的子类。 现在如果我写这样的东西,它是有效的: 然而,在for循环中,我无法与B匹配。我假设我需要一个构造函数模式,但由于B是抽象的,所以B没有构造函数模式。 这里,我只想打印B个实例。这个案子有解决办法吗?