2016-02-10 42 views
1

我有一個Scala的名單,我試圖將它傳遞給我的NetLogo模型:如何在斯卡拉列表傳遞給的NetLogo

> myscalalist 
List(2015-01, 2015-02) 

我想這一點:

App.app.command("set months " + myscalalist) 

,但我得到在我的ABM類的47行錯誤:

Illegal number format at position 54 in 
at org.nlogo.lex.Tokenizer.tokenize(Tokenizer.scala:30) 
at org.nlogo.lex.Tokenizer.tokenize(Tokenizer.scala:26) 
at org.nlogo.compiler.CompilerMain$.compile(CompilerMain.scala:23) 
at org.nlogo.compiler.Compiler$.compileMoreCode(Compiler.scala:34) 
at org.nlogo.workspace.Evaluator.org$nlogo$workspace$Evaluator$$invokeCompiler(Evaluator.scala:175) 
at org.nlogo.workspace.Evaluator.evaluateCommands(Evaluator.scala:18) 
at org.nlogo.workspace.AbstractWorkspaceTraits$Evaluating$class.evaluateCommands(AbstractWorkspaceScala.scala:163) 
at org.nlogo.workspace.AbstractWorkspaceScala.evaluateCommands(AbstractWorkspaceScala.scala:19) 
at org.nlogo.app.App.command(App.scala:849) 
at main.jago.ABM$$anonfun$simulate$1.apply(ABM.scala:47) 

是否有任何建議,從S​​cala的應用程序通過安全列表的NetLogo?

+1

命令方法的簽名是什麼?它期望什麼? –

+0

好點,我必須檢查 – user299791

+0

看起來像它期望一個字符串 – user299791

回答

3

對方回答適用於大多數類型的值的工作,但使用特定的NetLogo的API,而不是一般的Scala的將在更多情況下工作:

org.nlogo.api.Dump.logoObject(
    org.nlogo.api.LogoList(
    myscalalist.asInstanceOf[Seq[AnyRef]]: _*), 
    true, false) 

您的輸入列表中,這將產生字符串:

["2015-01" "2015-02"] 

類型轉換是不幸的,但爲了有必要爲此甚至Scala的類型,如上班例如List[Double];通常NetLogo預計值是AnyRef的子類型。

+0

然後我可以將logoObject分配給一個網絡標誌變量,或者我應該只是從結果中讀取字符串? – user299791

+0

它看起來不適用於List [Double],但僅適用於List [String] – user299791

+1

re:logoObject,結果是一個字符串,這就是您需要將其與'app.command'一起使用的字符串。 (方法名稱描述參數類型,而不是結果類型。)re:'List [Double]',我已經更新了我的答案。 –

2

我不知道NetLogo或它的api。但是,假設它接受一個字符串並解析它,誤差大概是的toString工作的斯卡拉列表

使用.mkString(", ")方法列表上的方式,這會變成List(2015-01, 2015-02)"2015-01, 2015-02"

的字符串mkString接受是分隔,

App.app.command("set months " + myscalalist.mkString(", ")) 
+0

是的,網絡標誌的正確答案是使用.mkString(「[」,「」,「」),然後在網內讀取字符串徽標代碼...謝謝 – user299791