2

Scala には、デフォルトの引数を作成できないという奇妙な欠点がありますargs。これが私の最新の試みです:

object Main extends java.lang.Object with ScalaObject with App {
    override val args:Array[String]=Array(args.toList.headOption.getOrElse("f"))
    println("args(0) = " + args(0))
}

ここでコードを実行します: http://ideone.com/B20HBA

scala.collection.mutable.ArrayOps$ofRef.length(ArrayOps.scala: 114) scala.collection.mutable.ArrayOps$ofRef.size(ArrayOps.scala:108) で scala.collection.mutable.Builder$class.sizeHint で scala.collection.SeqLike$class.size(SeqLike.scala:106) (Builder.scala:69) scala.collection.mutable.ListBuffer.sizeHint(ListBuffer.scala:45) で scala.collection.TraversableLike$class.to(TraversableLike.scala:628) で scala.collection.mutable.ArrayOps$ ofRef.to(ArrayOps.scala:108) で scala.collection.TraversableOnce$class.toList(TraversableOnce.scala:257) で scala.collection.mutable.ArrayOps$ofRef.toList(ArrayOps.scala:108) で Main$delayedInit $body.apply(Main.scala:2) scala.Function0$class.apply$mcV$sp(Function0.scala:40) で scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12) で scala.App$$anonfun$main$1 で.apply(App.scala:71) で scala.App$$anonfun$main$1.apply(App.scala:71) で scala.collection.immutable.List.foreach(List.scala:318) で scala.collection. generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:32) で scala.App$class.main(App.scala:71) で Main$.main(Main.scala:1) で Main.main(Main.scala) でgeneric.TraversableForwarder$class.foreach(TraversableForwarder.scala:32) で scala.App$class.main(App.scala:71) で Main$.main(Main.scala:1) で Main.main(Main.scala) でgeneric.TraversableForwarder$class.foreach(TraversableForwarder.scala:32) で scala.App$class.main(App.scala:71) で Main$.main(Main.scala:1) で Main.main(Main.scala) で

4

2 に答える 2

2

@blast_hardcheese が示したように、val の値をそれ自体に依存する式に有効に設定することはできません。これは、上記のコードで起こっていることです。

本当にこれを行う必要がある場合 (理由が思いつきません)、元の値super.への参照の前に追加することで、元の値を参照できます。

object Main extends App {
    override val args: Array[String] = if (super.args.isEmpty) Array("f") else super.args
    println("args(0) = " + args(0))
}

元の式では、最初の引数を超えて指定された引数が失われることに注意してください。それがあなたの意図であったかもしれませんが、そうでない場合は、上記のようなものに変更したいと思うでしょう.

于 2013-10-07T09:40:47.443 に答える