Project1

标题: 类是类还是实例 [打印本页]

作者: 英顺的马甲    时间: 2016-11-3 23:29
标题: 类是类还是实例
相信大家都知道如果
RUBY 代码复制
  1. class A
  2. end
  3. $a = A.new

那么$a就是A的实例,因此
RUBY 代码复制
  1. $a.class # => A

A虽然是一个类(Class),但同时也是一个名为类(Class)的类的实例
RUBY 代码复制
  1. A.class # => Class

那么既然是实例,那么也就是一个对象
RUBY 代码复制
  1. A.is_a?(Object) # => true


所以类既是自己的实例也是自己的类同时也是自己的对象
RUBY 代码复制
  1. a = Class
  2. a.is_a?(Class) # => true
  3. a.is_a?(Object) # => true
  4. p a = a.class while(a == Class)

JAVA 代码复制
  1. Class<?> kelas = Class.class
  2. System.out.println(kelas instanceof Object)
  3. System.out.println(kelas == Class.class)
  4. for(kelas = Class.class; kelas == Class.class; kelas = kelas.getClass())
  5.     System.out.println(kelas);


随后类到底是类还是实例还是对象呢?

只是突然觉得这个问题可以思考罢了,各位可别太认真==
作者: 喵呜喵5    时间: 2016-11-3 23:35
实例和对象有什么区别?
作者: shitake    时间: 2016-11-5 18:59
第二句就有问题了 应该说$a是A实例的引用。

作者: 唯道集虚    时间: 2016-11-5 23:20
感觉楼主的理解可能有些问题?
Ruby的语法我不太清楚,甚至连怎么写派生类都不懂…
但是我的面向对象世界观是,Class的实例化对象、由基类派生类等等……总是有和实例相近的地方……如果以“类是实例”作为比喻,虽然感觉有些引喻失意,但应该也没有什么太多不妥。只是如果不是比喻……就不太合适了吧?
(不太理解Ruby语法就没看代码 如果文不对题那还请见谅
作者: IamI    时间: 2016-11-5 23:54
好古老的问题……
Constant Class is a Class.
Constant Class is Object of Class Class.
All mentioned above is Object(s).
Object is a Class.


年轻人好好写码不要去纠结什么世界本源的问题
作者: Mr.Jin    时间: 2016-11-6 00:44
Ruby里
类本身也是一个对象 这是可以肯定的
当你定义一个类时 实际上创建了一个Class类的实例的常量
  1. class Player
  2.   def initialize(name)
  3.     @name = name
  4.   end
  5.   def name
  6.     return @name
  7.   end
  8. end
复制代码

  1. Player = Class.new do
  2.   def initialize(name)
  3.     @name = name
  4.   end
  5.   def name
  6.     return @name
  7.   end
  8. end
复制代码


都可以说得通
作者: RaidenInfinity    时间: 2016-11-6 10:07
class A < Object
作者: chd114    时间: 2016-11-7 01:27
你可以参考数组套数组什么的···数组里的元素也可以是数组啊
作者: yang1zhi    时间: 2016-11-7 12:15
他不能3个都是吗
作者: taroxd    时间: 2016-11-7 16:36
既是类也是实例
作者: Vortur    时间: 2016-11-7 18:41
本帖最后由 Vortur 于 2016-11-7 01:33 编辑

  谢谢!~@唯道集虚
  不过确实,在下是一个怪人呢...TAT..

[line]1[/line]

一、  感觉论述有问题,比如:“既然是实例,那么也就是一个对象”。

  据在下所知,Ruby皆对象。因此,“Ruby皆对象”是一个基本属性(基本属性==本质属性,只要不具备这个属性,那么就不是Ruby中的东西)。通常人们把它作为一个【最简属性】(不可分、以此来推导其他结论。例如用勾股定理来解题,那么勾股定理就是最简属性,而解出的答案则是“复合属性”。复合属性的正确性由最简属性决定和支持。)来使用。
  从“类”那句就已经是对象了,实例也是对象。“既然是实例,那么也就是一个对象”给人一种抽象层次混乱的感觉。


二、  名称的必要性,由互异性决定

  互异性由具体情境决定。
  可以理解为“在一个集合(抽象层次)中,各对象需要有足够的不同”。比如美洲豹可能有十几种英文称呼;在通常的、实际交流环境中,我们就叫它美洲豹就可以了,这就是“在我们的交流环境这个【抽象层次】里,美洲豹各类称呼没有足够的【互异性】的表现”。但在英文的、专业的、语言学的“抽象层次”里,这十几种英文称呼就具有了足够的“互异性”。

  是类是对象还是实例,要看具体的语言环境。
  笼统的来说,这三种都是。但在下最长见到的“子类”,都是因为游戏运行中,要使用一个父类的部分功能,但还要增减【一些新的功能】;那么在游戏运行这个抽象层面中,【一些新的功能】就是【足够的互异性】,这也是为何子类父类能够相互区别的原因。
  “$a = A.new”这个例子中,并未涉及$a的调用等具体信息,故就目前看来,【楼主在讨论一个脱离了实际情境、有过分抽象嫌疑的问题】。当然,楼主的问题也不是没有可能真的没有价值,但“过分抽象”应该是一个最容易遭人诟病的点了。

意象和抽象的区别




  




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1