読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

untilを使った繰り返し

処理をn回繰り返したいときは「until」が使えます。

// 処理を10回繰り返したい
for ( i <- 0 until 10 ) println( i )

実行結果です。

0
1
2
3
4
5
6
7
8
9

「0 until 10」を最初見たとき「なんだこれ?」と思ったんですが(そういう演算子があるのかなーとか思った)、どうもRichInt型の値「0」の関数「until」を引数「10」で呼び出しているらしい。引数つきの関数って「<関数名>(引数)」形式じゃないと実行できないんじゃなかったっけ?と思って試してみると、

  • 普通の関数はやはり実行できない。
  • オブジェクトのメソッド呼び出しで、引数が1つの場合「<オブジェクト名> <関数名> <引数>」で実行できた
// クラス
class Var {
    // 引数を1つ受け付ける関数
    def foo(a:String):String = a+a
    // 引数を複数受け付ける関数
    def hoge(a:String, b:String):String = a+b
}
var v = new Var
println( v.foo("x") )
println( v foo "x" ) // 引数が1つの場合、「<オブジェクト名> <関数名> <引数>」形式で実行できる。
//println( v hoge "x" "y" ) // これはコンパイルエラー


// 普通の関数
def foo( a:String ):String = a+a

println( foo("x") )
//println( foo "x" ) // これはコンパイルエラー

実行結果です。

xx
xx
xx

仕様書を探してみたけど、そんな説明は見つけられなかった。どこかに記載があるのかな。んー。