3

http://www.scala-lang.org/docu/files/ScalaByExample.pdfを読む

このコード片:

def While (p: => Boolean) (s: => Unit) {
  if (p) { s ; While(p)(s) }
}

この説明が与えられます:

While 関数は最初のパラメーターとしてテスト関数を受け取ります。この関数はパラメーターをとらず、ブール値を生成します。2 番目のパラメーターとして、これもパラメーターをとらず、Unit 型の結果を生成するコマンド関数を受け取ります。while は、テスト関数が true を返す限り、コマンド関数を呼び出します。

if (p)true または false に評価されるのはどこですか?

関数sはどこかで宣言されるべきではありませんか? 関数のコードはありませんsか?

4

2 に答える 2

4

if (p)true または false に評価されるのはどこですか?

まさにそこ、その行に。

pおよびsは、メソッドのパラメーター リストでそれらの前にあるため、名前による呼び出しパラメーターです。それらの名前が の本体で使用されるたびに、それらが評価されます。=>WhileWhile

関数sはどこかで宣言されるべきではありませんか? 関数のコードはありませんsか?

sWhileと同様に、メソッドへのパラメーターpです。s(なぜ、についてではなく、についてこの質問をしているのpですか?)。Scala のメソッドと関数は、複数のパラメーター リストを持つことができます。このWhileメソッドには 2 つのパラメーター リストがあります。

このメソッドを呼び出すには、評価されるもの(パラメーター) とブロック (パラメーター )Whileを渡します。Booleanps

var i = 0
While (i < 5) {
  i = i + 1
  println(i)
}

この例pではi < 5、 は に評価される関数でありBoolean、 とのs間のブロックです。{}

于 2012-10-03T15:21:39.697 に答える
0

署名を使用して任意の関数を入力pできるため、署名を使用して任意=> Booleanの関数を入力できるためsです=> Unit

whilep関数の停止基準も同様です。関数がループから抜け出すとp評価された場合は、本体(関数) が 1 回呼び出され、関数は同じ停止基準 (関数) と本体で再帰的にもう一度呼び出されます。falsewhiletrueswhilep

于 2012-10-03T15:25:00.053 に答える