Skip to content

Instantly share code, notes, and snippets.

@goldeneggg
Created April 3, 2014 09:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save goldeneggg/9951560 to your computer and use it in GitHub Desktop.
Save goldeneggg/9951560 to your computer and use it in GitHub Desktop.
scalaの可変長引数なメソッドをチェーン呼び出しした場合の挙動
object Aho {
def main(args: Array[String]) {
aaa(1, "2", true)
ddd(1, "2", true)
}
// aaa - ccc, そのまま可変長引数を渡して実行
def aaa(params: Any*) {
println("AAA params[%s] params class[%s]".format(params, params.getClass))
bbb(params)
}
def bbb(params: Any*) {
println("BBB params[%s] params class[%s]".format(params, params.getClass))
ccc(params)
}
def ccc(params: Any*) {
println("CCC params[%s] params class[%s]".format(params, params.getClass))
}
// ddd - fff, ": _*" 付きで渡して実行
def ddd(params: Any*) {
println("DDD params[%s] params class[%s]".format(params, params.getClass))
eee(params: _*)
}
def eee(params: Any*) {
println("EEE params[%s] params class[%s]".format(params, params.getClass))
fff(params: _*)
}
def fff(params: Any*) {
println("FFF params[%s] params class[%s]".format(params, params.getClass))
}
}
@goldeneggg
Copy link
Author

実行結果。そのまま渡すとWrappedArrayによるラップがネストしていく
可変長引数は、その 関数内では宣言された型のArray になっている

AAA params[WrappedArray(1, 2, true)] params class[class scala.collection.mutable.WrappedArray$ofRef]
BBB params[WrappedArray(WrappedArray(1, 2, true))] params class[class scala.collection.mutable.WrappedArray$ofRef]
CCC params[WrappedArray(WrappedArray(WrappedArray(1, 2, true)))] params class[class scala.collection.mutable.WrappedArray$ofRef]
DDD params[WrappedArray(1, 2, true)] params class[class scala.collection.mutable.WrappedArray$ofRef]
EEE params[WrappedArray(1, 2, true)] params class[class scala.collection.mutable.WrappedArray$ofRef]
FFF params[WrappedArray(1, 2, true)] params class[class scala.collection.mutable.WrappedArray$ofRef]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment