2016-02-10 33 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