首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >可选参数的本地抽象类型和默认值

可选参数的本地抽象类型和默认值
EN

Stack Overflow用户
提问于 2018-04-04 17:04:19
回答 1查看 149关注 0票数 1

我正在为具有两种可能的内部格式的矩阵类型编写一个接口。这是一个简化的版本:

代码语言:javascript
复制
type csc (* compressed-sparse-column format *)
type csr (* compressed-sparse-row format *)

type _ fmt =
| CSC : csc fmt
| CSR : csr fmt

type 's matrix = { sparsetype : 's fmt }

let newmat (type s) ?(fmt : s fmt = CSC) () = { sparsetype = fmt }

这不起作用,因为默认值CSC不是s fmt类型。

这个想法似乎行不通,因为不可能在签名中为类型变量指定默认值,即签名

代码语言:javascript
复制
val newmat : ?(fmt:'s sformat) -> unit -> 's matrix

在未显式指定fmt时,需要以某种方式指定该's = csc

有没有办法绕过这个限制?

期望OCaml接受这样的定义是不合理的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-04 17:40:31

想要它并不是不合理的(我自己也在很多场合想要它),但OCaml不接受它,这是有充分理由的。在存在高阶函数的情况下,很难与推理相结合。

所以,我担心你必须坚持使用非可选参数,或者创建几个函数。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49646930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档