很难理解 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。
我是一名经验丰富的 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。