为什么类继承自struct

时间:2016-03-21 21:52:57

标签: ruby

class A < Struct.new(:att)
end

相同
class A
  attr_accessor :att
end
在Ruby中

2 个答案:

答案 0 :(得分:8)

没有。它等于

class B
  attr_accesor :att
  def initialize(att)
    @att = att
  end
end

class A < B
end

几乎相同,但不等于

@att

不相等,因为该值实际上并未存储在B = Struct.new(:att) class B def real_att @att end end b = B.new(32) b.att # => 32 b.real_att # => nil

A = Struct.new(:att)

就个人而言,我不明白为什么在没有继承业务的情况下,人们不会做Struct

编辑:正如Jordan在评论中指出的那样,有一种更好的方法可以为结构添加方法:B = Struct.new(:att) do def process #... end end conStructor(teehee)接受一个块,它在上下文中执行新创建的类:无论你在那里定义什么,都将在新结构上定义。

Array.prototype.forEach()

答案 1 :(得分:0)

  

为什么一个类继承自struct

没有。类继承自其他类。在ruby中,要创建继承层次结构,您可以编写:

300.14

但是,你也可以这样做:

class A
  def bark
    puts "woof"
  end
end

class B < A
end

B.new.bark

--output:--
woof

这是一个继承自方法的类吗?没有! Ruby允许您为父类使用任意表达式 - 只要它返回一个类。代码:

class A
  def bark
    puts "woof"
  end
end

def do_stuff
  return A
end

class B < do_stuff
end

B.new.bark

--output:--
woof

是一个返回类的任意表达式:

Struct.new(:att)