我有一个Scala列表,我正在尝试将其传递给我的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)
是否有任何建议将安全列表从Scala应用程序传递给NetLogo?
答案 0 :(得分:3)
另一个答案适用于大多数类型的值,但使用特定于NetLogo的API而不是一般的Scala可以在更多情况下使用:
org.nlogo.api.Dump.logoObject(
org.nlogo.api.LogoList(
myscalalist.asInstanceOf[Seq[AnyRef]]: _*),
true, false)
在输入列表中,这会产生字符串:
["2015-01" "2015-02"]
类型转换是不幸的,但为了使其在Scala类型(例如Scala类型)上工作,这是必要的。 List[Double]
;通常NetLogo期望值为AnyRef
的子类型。
答案 1 :(得分:2)
我不知道NetLogo或它的api。但假设它需要一个字符串并解析它,错误可能是toString在scala列表上工作的方式
在您的列表中使用.mkString(", ")
方法,这会将List(2015-01, 2015-02)
变为"2015-01, 2015-02"
mkString接受的字符串是分隔符
App.app.command("set months " + myscalalist.mkString(", "))