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

代码片段中的'for'循环不理解[重复]

施琦
2023-03-14

我有下面的一段代码,它正在打印:一些(600)作为输出。

不知道加法是如何在“for”循环中发生的。

在下面,它混淆了“for”循环的代码块内发生的事情以及变量“y”的计算方式。有人能帮忙吗?

 object TestObject extends App
{
  def toInt(s: String): Option[Int] = {
    try
    {
      Some(Integer.parseInt(s.trim))
    }
    catch
      {
        case e: Exception => None
      }
  }
  val y = for
    {
    a <- toInt("100")
    b <- toInt("200")
    c <- toInt("300")
  } yield a + b + c
  println(y)
}

共有2个答案

饶元章
2023-03-14

从for循环内部调用toInt方法,该方法返回一个Option[Int]。现在for循环所做的是简单地打开Option容器并为变量a分配值为100。在类似的行中,变量b和c被分配值为200和300。

最后,yield 语句将值 a、b 和 c 相加,并将其放回 Option 容器中。

请参考https://docs.scala-lang.org/tutorials/FAQ/yield.html和https://alvinalexander . com/Scala/Scala-for-loop-yield-examples-yield-tutorial

何嘉运
2023-03-14

在Scala中,这被称为“理解的方法”。

< code>toInt将值包装在由< code >提取的< code>Option中

如果Option之一是,则结果将是

< code>yield总是返回它的最后一条语句,在您的情况下:< code>a b c

所以结果是Some(600)。

参见这里的文档:https://docs.scala-lang.org/tour/for-comprehensions.html

 类似资料:
  • 我想做一个小程序,从数组中删除一些不需要的字符,如/n,/t,问题是它在部分工作。第三届和第五届): 程序: 它显示了这个结果: 一些不需要的字符被删除,但不是全部。。。指数3和5。 下面是将html标记的字符串内容逐字符放入数组“caractereinside”的主要代码: 结果是: 如果我将"var ContenuesPacemenu"转换成一个规则数组,就像这样,它的工作原理是: 我明白了:

  • 此代码来自C primer p.446: 我不明白带两对括号的返回表达式。这本书前面没有类似的语法。

  • 精心挑选的有用的 JavaScript 代码片段,你可以在 30 秒或更短的时间内理解。

  • 我正在编写一个计算e^x值的方法。我在python中实现它的方式如下。 这将很好地返回e^x的值。但是,当我尝试在c#中实现相同的方法时,它没有输出与python中相同的值。以下是c#中的实现。 起初,这段代码的输出是一个无穷大符号。为了解决这个问题,我只是减少了循环运行的次数。在c#中,循环只运行10次,代码的输出非常接近于python中循环运行100次的输出。我的问题是,在不同的编程语言中,两

  • 考虑下面的代码片段 在代码片段1中,方法m1()在抛出声明中有SQLExctive,但它实际上抛出了类型为的引用变量。我在这里期待编译器出错,因为