Sheltie
Scalaでスコープがどのように機能するかを理解するために、Scala クラスを作成しました。相互参照として、同等の Java Sheltie クラスを作成しました。ここで困ったことがあります。
ScalaSheltie
クラスの本体には、呼び出されたメソッドへのメソッド呼び出しとbark
、呼び出しprintln
の直後のステートメントがありbark
ます。同等のメソッド呼び出しbark()
は、別のメソッド内の同等の Java クラスに配置できますが、任意のメソッドの外側では、当然のことながらDuplicate method bark()
.
私は Java コードがどのように機能するかを理解しているので、(Java での) この動作は驚くべきことではありません。なぜ Scala がこのように動作するのか、当惑することはありません。
私が解決したいのは、Scala がクラス本体で「呼び出し」を許可する理由と、Java では許可されないのに if ブロックで別の val 定義を作成できる理由です。
Foo.scala
class Sheltie {
val barkNum = 10
def bark() {
//local barkNum of "bark" method
val barkNum = 20
if(true){
//local "barkNum" of if-block
val barkNum = 30 //why does Scala not complain of a duplicate local variable, when Java does in the equivalent program Sheltie.java
println("Inside if block: No of times Riley barked is " + barkNum)
}
println("Outside if block: No of times Riley barked is " + barkNum)
}
bark //Why does this work, when you can't do this in Java
println("Outside bark: No of times Riley barked is " + barkNum)
}