【问题标题】:if/else in Scala: Illegal start of simple expression/IlScala 中的 if/else:简单表达式/Il 的非法开始
【发布时间】:2023-03-30 12:34:01
【问题描述】:

这些是错误:

scala.scala:13: error: not found: value listaFibonaccisAux
  listaFibonaccisAux int 0
  ^
scala.scala:4: error: illegal start of simple expression
  if (int>fibby) fibby :: (listaFibonaccisAux int (n+1))
  ^
scala.scala:1: error: illegal start of definition
  else List()
  ^
scala.scala:1: error: eof expected but '}' found.
  }
  ^

这是我的代码,错误似乎是指简单的if/else 语句,我已经尝试在括号中包装和展开东西,但它没有帮助:

def listaFibonaccis (int:Int):List[Int]=
  {
  listaFibonaccisAux (int, 0)
  }

def listaFibonaccisAux (int:Int, n:Int):List[Int]=
  {
  var fibby = fib n
  if (int> fibby)
    fibby :: (listaFibonaccisAux (int, (n+1)))
  else 
    List()
  }

def fib( n : Int) : Int = n match 
  {
   case 0 | 1 => n
   case _ => fib( n-1 ) + fib( n-2 )
  }

fib 在斐波那契数列中找到一个数 n

listaFibonaccisAux 使用 fib 创建斐波那契数列,当数大于 int 时停止

listaFibonaccis 只是一个简单的包装器,用 0 调用另一个包装器来启动它

这是一个普通的if/else 声明给我带来了麻烦,这很可悲。

【问题讨论】:

    标签: scala


    【解决方案1】:

    编译器抱怨if/else,因为它认为之前的行没有正确结束。

    试试这个:fib(n)

    虽然“中缀”(空格符号)有时很方便......

    instance.method(arg) 转为instance method arg

    ...无法应用,因为您已尝试使用它。

    【讨论】:

    • 弄清楚 Scala 在哪里需要括号,在哪里不需要括号,这让我发疯了,谢谢你成功了。
    • 通常最好避免使用中缀,直到您有感觉为止,然后只在最简单、最明显的情况下使用。
    • 不能在普通函数调用中使用中缀——它需要一个成员函数。之所以称为“中缀”,是因为函数名放在左右两边。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    • 1970-01-01
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多