(尖括号是 Rust…)
对于方法定义 fn S::method[T]() -> {}
, 其中有泛型参数 T
, 在调用的时候有没有办法手动指定 T
?
现在尝试过有 (e : )E
或者 let a: E = e
的语法提供类型推断从而推出泛型参数 T
, 但有些场景 E
可能很复杂, 转而希望提示 T
, 有办法写吗?
(尖括号是 Rust…)
对于方法定义 fn S::method[T]() -> {}
, 其中有泛型参数 T
, 在调用的时候有没有办法手动指定 T
?
现在尝试过有 (e : )E
或者 let a: E = e
的语法提供类型推断从而推出泛型参数 T
, 但有些场景 E
可能很复杂, 转而希望提示 T
, 有办法写吗?
有没有具体的代码来说明必要的使用场景?目前是没有这样的语法的,只能在参数列表中或者返回值使用(expr : TypeAnnotation)
。
另外类型标注可以只标一部分:
let complex = ([("", [(1, false, true)])] : Array[(Json, _)])
今天改代码的时候的例子, 这里指定 MainState
指定了两次, 而且还得引入一个本来可能可以推导的类型,
let cursor = (states.path() : @respo_node.RespoCursor[MainState])
let state = (states.cast_branch() : MainState)
参考 React 的习惯, 组件局部的 state 想要指定类型, 一次应该是够的, 就需要指定泛型参数, 然后其他借助推导,
let (state, cursor) = states.cast_some_pair::<MainState>();
本意是希望 cursor 当中带一个类型信息上去, 这样方便给后续的代码能做类型校验. 所以希望 cursor 的类型是明确的.
一般是建议给最开始的数据标类型,states
标一次类型可以吗
应该算一个特殊场景了. UI 的数据整个是一个树形结构, 框架当中定义整个树形结构的数据的时候用的是通用的结构. UI Component 跟框架是分离的, 通过声明式的 DSL 挂进来, 而在 UI Component 内部维护的局部状态, 有自己定义的类型, 也就是说树形结构不同分支上会用到不同的类型(但实际存储用的是 Json 或者 Any). 我这边因为用了一个特别的方案把这个行为暴露在逻辑当中了, 存储 Json 数据是在全局的树形结构上, 定义类型还是 UI Component 自行定义的, 所以组件内少不了这个 type casting 的行为, 这样我不能直接在 states 上定义了.
或者在 tuple 内部做解构赋值的时候能跟普通的 let v: T
写法那样指定类型吗, 其他交给推导,
let (state: MainState, cursor) = ...
哦, 好像也能写, 就多一层括号,
let (state, cursor) : (MainState, _) = ...
(pattern : TypeAnnotation)
是可以的:
let ((state : MainState), cursor) = ...
中间这一层括号略意外, 不加括号是可能影响语法解析?