# R2-01 — spec_parser.go: 属性值处理 ## 缺失方法 ### MIoTSpecProperty.eval_expr — 表达式求值 ```python def eval_expr(self, src_value: Any) -> Any: if not self.expr: return src_value try: return eval(self.expr, {'src_value': src_value}) except Exception as err: return src_value ``` **Go 实现**:不推荐 `eval`,使用简单的数值表达式库或手动解析常见模式。若 `expr` 字段为空则返回原值。 ### MIoTSpecProperty.value_format — 值格式转换 ```python def value_format(self, value: Any) -> Any: if value is None: return None if isinstance(value, str): if self.format_ == int: value = int(float(value)) elif self.format_ == float: value = float(value) if self.format_ == bool: return bool(value in [True, 1, 'True', 'true', '1']) return value ``` **Go 实现**:根据 `Format` 字段将字符串转为对应类型。 ### MIoTSpecProperty.value_precision — 值精度处理 ```python def value_precision(self, value: Any) -> Any: if value is None: return None if self.format_ == float: return round(value, self.precision) if self.format_ == int: if self.value_range is None: return int(round(value)) return int(round(value / self.value_range.step) * self.value_range.step) return value ``` **Go 实现**:使用 `math.Round` 或自定义 round。int 类型需要按 step 对齐。 ## 目标文件 `D:\miot\go-miot\spec_parser.go` 在 `MIoTSpecProperty` 结构体上添加 3 个方法: - `func (p *MIoTSpecProperty) EvalExpr(srcValue interface{}) interface{}` - `func (p *MIoTSpecProperty) ValueFormat(value interface{}) interface{}` - `func (p *MIoTSpecProperty) ValuePrecision(value interface{}) interface{}`