结构概念中具有相同类型的多个属性

时间:2019-08-05 23:54:29

标签: bixby

因此,似乎结构概念不能具有相同类型的属性。

例如,如果我有以下内容

structure (A) {
  description (blah blah)
  property (prop1) {
    type (Type1)
  }
  property (prop2) {
    type (Type1)
  }
}

我收到“错误:属性#prop1复制属性#prop2的类型”。我是在做错什么还是应该如何工作?我不明白为什么一个结构不能具有相同类型的两个属性。无论如何,我通过提出一个扩展原始概念的附加概念来解决了这个问题,因此类型在技术上具有不同的名称,但在功能上是相同的。但是,这有点像PITA,因为现在,当我需要一个需要多个同类型属性的结构时,我必须做出所有这些额外的概念。

2 个答案:

答案 0 :(得分:1)

是的,您需要为每个属性使用不同的类型,因为Bixby在解析用户话语时会将每个属性的类型用于上下文。

如果您的结构将同一个类型的所有属性归为一类,则可以使用max(Many)documentation)来表示prop的类型为{{1 }},并且可能包含多个值。此选项的示例用例是需要处理配方成分的胶囊。可以将所有成分汇总到一个Type1属性中,而不必为每个属性都拥有单独的属性。

如果您的结构要求每个属性都分开,则需要为每个属性创建一个不同的ingredients,以允许Bixby区分每个属性。此选项的示例用例是跟踪体育统计数据的胶囊。仅将篮球队的每个球员标记为type是不够的。您还需要定义播放器的类型。这可以通过创建type(Player)类型并将其扩展到每种类型的播放器来完成(这是您当前所做的)。

答案 1 :(得分:0)

根据您的用例,使用角色分配可能是合适的。角色的作用是具有相同基础数据的不同上下文。

例如在火车时刻表中,我可能有相同的出发和到达站列表(作为枚举)。但是,这些在上下文上是不同的。通过使用角色扮演,我可以创建一个通用的火车站概念,但可以创建两个上下文不同的角色,例如出发站和到达站的概念

借助角色角色,我可以在结构化概念中同时使用两者。

一些示例代码(摘自我的开源Bixby示例代码-https://github.com/rogerkibbe/bixby_bart_commuter

Station.model.bxb的摘录-站点的基础

enum (Station) {
  description (BART Station Names)
  symbol(12th St. Oakland City Center)
  symbol(16th St. Mission)
  symbol(19th St. Oakland)
  symbol(24th St. Mission)
  symbol(Antioch)

由此,我创建了两个角色概念:

enum (SearchDepartureStation) {
  description (Train Departure Station)
  features {
    transient
  }
  role-of (Station)
}

enum (SearchArrivalStation) {
  description (Train Arrival Station)
  features {
    transient
  }
  role-of (Station)
}

最后,我可以在结构化概念中使用以上两者(以下摘录):

structure (TrainSchedule) {
  description (Train Schedule)
  property (searchDepartureStation) {
    type (SearchDepartureStation)
    min (Required)
    max (One)
  }
  property (searchArrivalStation) {
    type (SearchArrivalStation)
    min (Required)
    max (One)
  }