字符串连接中的类型不匹配

时间:2012-11-30 17:11:28

标签: scala concatenation type-mismatch gatling

我是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

我做错了什么?

2 个答案:

答案 0 :(得分:2)

Gatling提供

repeat以重复Gatling任务,例如查询网站。如果您查看documentation(我无法找到repeat的API文档的链接),您会看到重复需要 ,这就是为什么你的错误信息说“required:com.excilys.ebi.gatling.core.structure.ChainBuilder”。但是,您所做的只是追加一个字符串 - 它不会返回ChainBuilder类型的值。

此外,附加到字符串是不应该通过Gatling完成的。在我看来,好像你将Gatling的repeat与Scala for loop混为一谈。如果您只想将"_test"追加到data 10次,请使用Scala的一个循环(forwhile)或功能方法,例如foldLeft。以下是两个例子:

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

/* Functional style with lazy streams */
data += Stream.continually("_test").take(10).mkString("")

答案 1 :(得分:0)

您的问题是阻止

{
  data += "_test"
}

评估为Unit,而repeat方法似乎希望评估为ChainBuilder

查看repeat方法的文档。我无法找到它,但假设它看起来像

可能是合理的
def repeat(numTimes: Int)(thunk: => ChainBuilder): Unit

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

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

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