首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析ATS类型误差

解析ATS类型误差
EN

Stack Overflow用户
提问于 2017-02-08 01:49:44
回答 1查看 131关注 0票数 3

前言:从ATS网站学习ATS。

当试图从列表中提取记录时,一旦尝试引用记录变量,就会在下面的x4.a上得到一个类型错误。

那么,为什么这次失败-- x4不会知道它有记录吗?

代码语言:javascript
复制
typedef
abc1_rec = '{a=int, b=int, c=char}
typedef
abc2_rec = '{a=int, b=char, c=string} 

val x1 = '{a=1,b=3,c='A'} : abc1_rec        // boxed record
val x2 = '{a=1,b='B',c="CAT"} : abc2_rec    // boxed record
val a1 = x2.a                               // =1
val x3 = (x2 :: x1 :: list_nil())           // concat list x2 + x1 + nil
val x4  = x3.head()                         // record x2

val x5 = x4.a      // error - [a] cannot be found

/tmp/patsopt_tcats_lu0auT: 1440(line=77,offs=12) -- 1442(line=77,offs=14):错误(3):a无法找到:类型S2EVar(779)预计为tyrec(记录)。patsopt(TRANS3):总共有一个错误。退出(ATS):未提及的异常:_2home_2hwxi_2Research_2ATS_2dPostiats_2src_2pats_error_2esats__FatalErrorExn(1025)

EN

回答 1

Stack Overflow用户

发布于 2017-02-08 14:13:09

注: x1和x2是不同的类型。他们不可能真的被列在同一个名单上。在这种情况下,x3的类型是list(X,2),它被假定为abc1_recabc2_rec的子类型;x4的类型为T,而x4.a给出类型错误,因为打字机无法推断T是记录类型。

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

https://stackoverflow.com/questions/42103292

复制
相关文章

相似问题

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