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由 Gatling 提供,用于重复 Gatling 任务,例如查询网站。如果您查看文档(我无法找到指向 API 文档的链接repeat),您会看到 repeat 需要一个chain,这就是您的错误消息显示“required: com.excilys.ebi”的原因.gatling.core.structure.ChainBuilder”。但是,您所做的只是附加到一个字符串——它不会返回 type 的值ChainBuilder

此外,附加到字符串不是任何应该通过 Gatling 完成的。在我看来,您好像将 Gatling'srepeat与 Scala forloop混淆了。如果您只想追加10 次,"_test"data使用 Scala 的循环之一 ( for, while) 或使用例如foldLeft. 这里有两个例子:

/* 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方法似乎希望它评估为 a ChainBuilder

查看该repeat方法的文档。我找不到它,但假设它看起来像这样可能是合理的

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

我不确定该repeat方法是否有什么特别之处,但是根据您的使用情况,您可以只使用此块而不是repeat(10){...}

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

另外,作为旁注,您不需要return关键字 with scala。你可以说data,而不是return data

于 2012-11-30T17:33:49.840 回答