Ruby类继承问题

Ruby类继承问题,ruby,Ruby,我试图得到这个结果: Car.class.name # => "Car" Truck.class.name # => "Truck" Van.class.name # => "Van" Car/Truck/Van.superclass.name # => "Vehicle" 我这样做: require "rspec/autorun" class Vehicle end class Car < Vehicle end class Van < Vehi

我试图得到这个结果:

Car.class.name # => "Car"
Truck.class.name # => "Truck"
Van.class.name # => "Van" 
Car/Truck/Van.superclass.name # => "Vehicle" 
我这样做:

require "rspec/autorun"

class Vehicle
end

class Car < Vehicle
end

class Van < Vehicle
end

class Truck < Vehicle
end

describe Car do
  describe ".class.name" do
    it "returns name of the class" do
      expect(Car.class.name).to eq "Car"
    end
  end
end
需要“rspec/autorun”
等级车辆
结束
车辆类别
结束
厢式货车
结束
等级卡车<车辆
结束
描述汽车做什么
描述“.class.name”do
它“返回类的名称”do
expect(Car.class.name).to eq“Car”
结束
结束
结束

为了实现这一点,我缺少Ruby类系统的哪些方面?

你的直觉很好。从表面上看,这个挑战似乎是不正确的,如果它的目的是“一个相对简单的代码挑战”,那么我认为肯定是这样的

另一方面,如果挑战意味着棘手,那么指定的结果在Ruby中肯定是可能的:

class车辆
def自我类
自己
结束
结束
汽车类<汽车类;结束
客货两用车;结束
货车类<汽车类;结束
p Car.class.name#=>“Car”
p Truck.class.name#=>“Truck”
p Van.class.name#=>“Van”
p Car.superclass.name#=>“车辆”
在repl.it上试用:


但是,由于对挑战或其来源一无所知,因此无法确定这是否是预期的解决方案。

您有编码挑战的链接吗?观察得很好!你知道改变self.class是否会把类在其他上下文中的行为弄得一团糟吗?是的,我知道解决方案很简单,我把它复杂化了,而且我很难回避“为什么”“因素”。@SilvioMayolo我肯定会认为这会导致代码出现一些异常行为,从而对
.class
的行为做出假设,这在Ruby生态系统中是一个非常重要的代码。
class Vehicle
  def self.class
    self
  end
end

class Car < Vehicle; end
class Van < Vehicle; end
class Truck < Vehicle; end

p Car.class.name # => "Car"
p Truck.class.name # => "Truck"
p Van.class.name # => "Van"
p Car.superclass.name # => "Vehicle"