2012-11-30 30 views
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 

我在做什麼錯?

+0

您顯示的代碼段太短而無法給出答案。你在哪裏以及如何使用加特林?你的類型錯誤發生在哪一行? –

+0

類型錯誤發生在行數據+ =「_test」。這將是一個ghelling場景的「幫手」功能 – rmonjo

回答

2

repeat由Gatling提供以重複Gatling任務,例如查詢網站。如果您看看documentation(我無法找到指向repeat的API文檔的鏈接),您會看到重複期望,這就是爲什麼您的錯誤消息顯示「必需:com。 excilys.ebi.gatling.core.structure.ChainBuilder」。但是,您所做的只是附加到一個字符串 - 不會返回類型爲ChainBuilder的值。

此外,附加到字符串是沒有什麼應該通過加特林。它看起來好像你把Gatling的repeat與Scala for loop混淆在一起。如果您只想追加"_test"data 10次,請使用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("") 
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

+0

thx你就是這樣,我接受了另一個,但thx! – rmonjo

相關問題