【问题标题】:If there exist a type with no method can you consider it a object?如果存在没有方法的类型,您可以将其视为对象吗?
【发布时间】:2018-07-18 12:18:32
【问题描述】:

要拥有一个对象,我们是否需要同时拥有类型声明和方法?

 type IntSet { 
         words []uint64
    }

func (s *IntSet) Method(x int) int {}

即你声明一个类型:

type IntSet { 
     words []uint64
}

但是保持原样这仍然可以被视为一个对象吗?

【问题讨论】:

  • The Go Programming Language Specification 使用了单词 object 一次(可能是错误的)。对象是什么意思?
  • 严格来说,Go 根本没有“对象”。但是人们仍然将许多值(有或没有方法)称为对象。你可以随便叫它。

标签: function go methods types


【解决方案1】:

通常是任何类型的对象。没有方法的类型仍然是一种类型,它只是解释它拥有什么以及可以操纵它。

您可能会想到 golang 技术上没有的类,但您可以将类型 + 方法视为类。没有方法,它们更接近于结构。

【讨论】:

    【解决方案2】:

    类型声明和方法定义的组合不会实例化任何内存。因此,在前一种情况下或后一种情况下都没有“对象”。

    要在 golang 意义上创建一个“对象”,您必须使用 new() 或 make() 或文字语法,它会创建该类型的“实例”并将其分配给 var:

    intset := IntSet{ words: []uint64{1,2,3,4} }
    

    https://play.golang.org/p/BFdRL2HBbRp

    【讨论】:

    • golang 意义上根本没有“对象”。
    • 不同意。对于初学者来说,一个具有身份、封装、组合、调度的事物——这已经足够接近“对象”了。 “你可以随心所欲地称呼它”,嗯? :)
    • 传统上,对象是“类的实例”。 Go 没有类,因此没有对象。它有很多相似之处,通俗地说,许多 Go 程序员都提到“对象”。但从技术上讲,Go 没有对象,因此技术讨论不应将这些术语混为一谈。通俗地说,我不在乎你或其他人怎么称呼他们。我也使用了“对象”这个词——但不是在技术讨论中,就是这样。
    • 不同意,这个问题是一个概念性的教学时刻,而不是对术语的讨论。使用学习者的术语来建立概念理解,从而提高术语精度。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    • 2017-12-20
    • 2019-11-17
    • 1970-01-01
    • 2018-07-06
    • 2011-06-20
    • 2020-01-09
    相关资源
    最近更新 更多