parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

А еще...

Sumo 12.01.2019 06:45 / 12.01.2019 06:46

... можно написать простенькую обвязку вокруг хеша:
@CLASS
List

@OPTIONS
locals

@create[]
  $self._list[^hash::create[]]

@count[]
  $result(^self._list.count[])

@GET_DEFAULT[aIndex]
  $result[$self._list[$aIndex]]

@GET[aType]
  $result[]
  ^switch[$aType]]{
    ^case[def;bool]{$result(^self.count[] > 0)}
    ^case[expression;double]{$result(^self.count[])}
    ^case[hash][$result[^hash::create[$self._list]]]
  }

@GET_first[]
  $result[^self._list.at[first]]

@GET_last[]
  $result[^self._list.at[last]]

@append[aItem]
  $result[]
  $self._list.[^self.count[]][$aItem]

@foreach[aNumName;aItemName;aCode;aSep]
  $result[^self._list.foreach[k;v]{$caller.[$aNumName][$k]$caller.[$aItemName][$v]$aCode}{$aSep}]
И не делать ничего руками в коде с хешем:
$TX[^List::create[]] 

$hD1[$.type[D] $.device[D1] $.deviceType[T1] $.status[S1] .... ]
$hS1[$.type[S] $.sensor[S1] $.value[V1] .... ]

^TX.append[$hD1]
^TX.append[$hS1]

^TX.foreach[_;v]{
  ^switch( $v.type ){
   ^case[D]{
     ^switch[$v.deviceType]{
     ^case[T1]{ ^checkDeviceT1[$v] }
     ^case[T2]{ ^checkDeviceT2[$v] }
     ^case[DEFAULT]{ ^sendAlert[new device type ${v.deviceType}] }
     }
   }
   ^case[S]{ ^checkSensor[$v] }
   ^case[DEFAULT]{ ^sendAlert[new type ${v.type}] }
  }
}