很难理解 Scala 的基础知识

Hard time understanding the basics of Scala

我是一名经验丰富的 Python 开发人员,我必须为我的新工作学习 Scala。 我在使用 CodeWars 练习 Python 时玩得很开心,并决定也尝试使用 Scala,但有些东西我无法理解...

下面我有一个练习的部分答案,你可以在这里找到https://www.codewars.com/kata/5c8bfa44b9d1192e1ebd3d15/train/scala

object SheepAdvisor {
  
  def warnTheSheepCheck(queue: Array[String]): String =
    // println(queue)
    if (queue.last == "wolf") {
      "Pls go away and stop eating my sheep"
    } else {
      s"Oi! Sheep! You are about to be eaten by a wolf!"
    }
}

我不明白的是,为什么我不能只打印输入?如果我取消注释 print 语句,整个代码就会中断。这对我来说没有意义。

错误:

src/main/scala/solution.scala:4: error: type mismatch;
 found   : Unit
 required: String
    println(queue)
           ^
src/main/scala/solution.scala:5: error: not found: value queue
    if (queue.last == "wolf") {

我真的习惯于从小部分解决问题,通常是打印一些东西来验证我是否走在正确的轨道上。这是我不知道的 Scala 的某种范式转变吗?

任何专注于来自 Python 的人的 Scala 资源都将不胜感激!

对于 Scala 2(可在 Codewars 上使用),您需要将整个函数体包裹在大括号中,否则编译器会将 warnTheSheepCheck 视为对 println which returns Unit 的调用:

object SheepAdvisor {
  def warnTheSheepCheck(queue: Array[String]): String = {  // here
    println(queue)
    if (queue.last == "wolf") {
      "Pls go away and stop eating my sheep"
    } else {
      s"Oi! Sheep! You are about to be eaten by a wolf!"
    }
  }  // and here
}

Scala 3 有 optional braces feature which allows to omit braces in this case