时
class A < Struct.new(:att)
end
与
相同class A
attr_accessor :att
end
在Ruby中?
答案 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)