Ruby 我可以使用默认的初始化值,而不必在child中显式声明属性名吗

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,

我来自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, 
    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主义者不会把方法参数放在不同的行上。你的语法很好,但大多数红宝石爱好者都不喜欢。或者,它有默认值,但有一个类似的概念。。。