Scala 如何在Netlogo扩展中使用可选标识

Scala 如何在Netlogo扩展中使用可选标识,scala,netlogo,Scala,Netlogo,我想创建一个netlogo原语,它可能接收布尔值,也可能不接收布尔值。因此,我希望用户能够使用以下两种方式中的原语: 1: 2: 我试着用OptionalType来做,但做不到。有可能做我想做的吗?如果是这样,我该怎么做呢?所以OptionalType不幸的是,它只能与CommandBlockType一起使用。要了解这是如何工作的一个很好的例子,请查看(可能在第一步中您看到了对它的引用)OptionalType不适用于BooleanType 还有一个次要的选择,有点不成熟。您可以在语法中使用Re

我想创建一个netlogo原语,它可能接收布尔值,也可能不接收布尔值。因此,我希望用户能够使用以下两种方式中的原语:

1:

2:


我试着用OptionalType来做,但做不到。有可能做我想做的吗?如果是这样,我该怎么做呢?

所以
OptionalType
不幸的是,它只能与
CommandBlockType
一起使用。要了解这是如何工作的一个很好的例子,请查看(可能在第一步中您看到了对它的引用)
OptionalType
不适用于
BooleanType

还有一个次要的选择,有点不成熟。您可以在语法中使用
RepeatableType
以及设置
defaultOption
minimumOption
(这样NetLogo就知道
0
参数是可以/应该的)。Scala代码示例:

objectrepeatabletypetest扩展api.Command{
重写def getSyntax=
命令语法(
右=列表(BooleanType | RepeatableType),
defaultOption=Some(0),
最小选项=一些(0)
)
def perform(args:Array[api.Argument],context:api.context){
println(参数长度)
如果(args.length>0){
val ref=args(0).getBoolean
println(ref)
}否则{
println(“未给出参数!”)
}
}
}
然后,您只需在括号中用布尔参数包装调用,这样NetLogo就知道您不会启动新命令(它需要
defaultOption
而不带参数):


正如您在示例中所看到的,这个问题是如果您的用户想要,他们可以提供额外的无用布尔:
(示例scala:rep bool false)
。如果您的代码忽略了它们,它们将不会产生效果,但它们可能会让扩展用户感到困惑或奇怪。

尝试时出现了什么问题?错误消息?意外行为?没问题,如果这(以及其他答案)满足了您的需要,请随意点击“接受”按钮,以便将来其他人知道什么是有效的。
ask Walkers [
    qlearningextension:learning
]
ask Walkers [
    qlearningextension:learning true
]
to test
  sample-scala:rep-bool
  (sample-scala:rep-bool true)
  (sample-scala:rep-bool false)
  (sample-scala:rep-bool false true false true false)
end