0

私は Scala に本当に慣れていないので、文字列を連結することさえできません。これが私のコードです:

object RandomData {

private[this] val bag = new scala.util.Random

def apply(sensorId: String, stamp: Long, size: Int): String = {
  var cpt: Int = 0
  var data: String = "test"
  repeat(10) {
    data += "_test"
  }
  return data
}
}

エラーが発生しました:

type mismatch;
 found   : Unit
 required: com.excilys.ebi.gatling.core.structure.ChainBuilder

私は何を間違っていますか??

4

2 に答える 2

2

repeatガトリング タスクを繰り返すためにガトリングによって提供されます。たとえば、Web サイトのクエリです。ドキュメントを見ると( の API ドキュメントへのリンクを見つけることができませんでした)、repeat がchainrepeatを期待していることがわかります。これが、エラー メッセージに「required: com.excilys.ebi」と表示される理由です。 .gatling.core.structure.ChainBuilder". ただし、文字列に追加するだけで、 type の値は返されません。ChainBuilder

さらに、文字列への追加は、Gatling を介して行う必要はありません。repeatGatlingと Scala forloopを混同しているように見えます。"_test"10 回だけ追加したい場合はdata、Scala のループ ( for, while) のいずれかを使用するか、関数型のアプローチを使用しfoldLeftます。以下に 2 つの例を示します。

/* Imperative style loop */
for(i <- 1 to 10) {
  data += "_test"
}

/* Functional style with lazy streams */
data += Stream.continually("_test").take(10).mkString("")
于 2012-11-30T17:35:00.417 に答える
0

あなたの問題は、ブロック

{
  data += "_test"
}

に評価されUnitますが、repeatメソッドは に評価することを望んでいるようですChainBuilder

repeatメソッドのドキュメントを確認してください。私はそれを見つけることができませんでしたが、おそらく次のように見えると仮定するのが合理的です.

def repeat(numTimes: Int)(thunk: => ChainBuilder): Unit

メソッドが特別なことをするかどうかはわかりませんrepeatが、あなたの使い方では、代わりにこのブロックを使うことができますrepeat(10){...}

for(i <- 1 to 10) data += "_test"

returnまた、補足として、 scalaのキーワードは必要ありません。dataの代わりに言うことができますreturn data

于 2012-11-30T17:33:49.840 に答える