Ruby 我可以使用默认的初始化值,而不必在child中显式声明属性名吗
我来自Java世界,但我尝试使用这样的基类Ruby 我可以使用默认的初始化值,而不必在child中显式声明属性名吗,ruby,Ruby,我来自Java世界,但我尝试使用这样的基类 class Bicycle attr_reader :gears def initialize( gears: 1, seats: 2, wheels: 2 ) @gears = gears @seats = seats @wheels = wheels end end class CrazyBicycle < Bicycle def initialize( seats: 2,
class Bicycle
attr_reader :gears
def initialize( gears: 1,
seats: 2,
wheels: 2 )
@gears = gears
@seats = seats
@wheels = wheels
end
end
class CrazyBicycle < Bicycle
def initialize( seats: 2,
wheels: 2 )
super(101, seats, wheels)
end
end
b = CrazyBicycle.new(3, 4)
puts b.gears
但这似乎有很多不必要的变量名。是否有某种Ruby sugar可以用来防止它如此明确?您正在使用,因此在调用它们时必须始终传递参数名。如果不想传递参数名称,请删除冒号,如下所示:
class Bicycle
attr_reader :gears
def initialize( gears = 1,
seats = 2,
wheels = 2 )
...
end
您正在使用,因此在调用时必须始终传递参数名称。如果不想传递参数名称,请删除冒号,如下所示:
class Bicycle
attr_reader :gears
def initialize( gears = 1,
seats = 2,
wheels = 2 )
...
end
对于关键字参数,无论何时调用initialize方法,您都需要指定参数名称,即使这是通过
super
间接实现的:
class CrazyBicycle < Bicycle
def initialize(seats: 2, wheels: 2)
super(gears: 101, seats: seats, wheels: wheels)
end
end
class疯狂自行车
对于关键字参数,无论何时调用initialize方法,都需要指定参数名称,即使是通过super
:
class CrazyBicycle < Bicycle
def initialize(seats: 2, wheels: 2)
super(gears: 101, seats: seats, wheels: wheels)
end
end
class疯狂自行车
没有直接关系,但大多数Ruby学家不会将方法参数放在不同的行上。你的语法很好,但大多数Ruby主义者都会反对。或者,它有默认值,但有一个类似的概念…没有直接的关系,但大多数Ruby主义者不会把方法参数放在不同的行上。你的语法很好,但大多数红宝石爱好者都不喜欢。或者,它有默认值,但有一个类似的概念。。。