Selector(意译)

apagebook · · 1561 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

【EBNF定义】Selector = "." identifier 【EBNF解释】就是说一个'.'加上一个标识符就是一个 Selector 。 【翻译】个人觉得不能翻译成选择器,应该翻译成一次选择,因为这是一个选择的过程,见后文。 【含义】 x.f 这个选择表达式中, f 就称之为 Selector ,就是一次选择,这次选择可能选择了类型为T的一个结构体中的一个 field ,也有可能选择了这个类型相关联的 method 。更重要的是,还有可能是选择了包含在类型 T 中的匿名 field中的field或者method。 【规则】对于x.f这个选择表达式: 1.假设 x 的类型为 T 或者 *T( T 的 underlying type 不能是指针类型或者 interface 类型),此时 x.f 表示 T 中最浅的 field f 或者 method f 。如果 T 中没有这样的 f ,那么这个选择表达式就是非法的。 2.假设 x 的类型为 I( I 的 underlying type 是 interface ),x.f 表示一个名叫 f 的 method ,具体的 method 由运行时 x 的 value 给出。如果 x 对应的 I 类型的 method set 中没有这个方法,那么这个选择表达式是非法的。 3.这有一个异常情况,如果 x 的类型是【 named pointer type :命名指针类型。注意,命名指针类型不能做为 method receiver ,也就是方法接收者】,同时,(\*x).f 是一个合法的选择表达式,那么 x.f 就是 (\*x).f 的缩写。 4.其他所有情况,x.f 这个表达式是非法的。 5.如果 x 是 pointer 类型【包括 named pointer type 和 unamed pointer type】,值是 nil ,x.f 会引起 runtime panic。 6.如果 x 是 interface 类型,值是 nil,x.f会引起 runtime panic。

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1561 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传