如何在Ruby中引用带有Symbol的类?

时间:2014-10-30 15:43:35

标签: ruby class hash symbols

我想创建一个哈希,其键引用类的符号,值为某个数组,例如,引用该特定类的颜色。截至目前,我的实现是这样的:

module DomesticAnimal
    attr_accessor :name

    def eat(food)
        puts "Eating #{food}"
    end
end

module AnimalColours #Lo separo para realizar más abstracción
    @@colours = {
        :dog => ["White", "Grey", "Black", "Brown"],
        :cat => ["White", "Black"],
    }

    def self.hasColour(type, colour)
        if @@colours[type] != nil
            @@colours[type].each do |x|
                return true unless x != colour
            end
        end
        return false
    end
end

class Dog
    include DomesticAnimal

    def initialize(name, colour)
        @name = name

        if AnimalColours.hasColour(:dog, colour)
            @colour = colour
        else
            raise "Colour error"
        end
    end

    def goOut(place)
        puts "#{name} when out for a walk to #{place}"
    end
end

dog = Dog.new("Juan", "Black")

dog.goOut("the park")

1 个答案:

答案 0 :(得分:0)

您可以使用字符串作为哈希的键而不是符号。 您可以使用class.name访问类的名称(字符串)。

我想如果你想让它们成为符号,你可以拨打class.name.to_sym并让密钥为:Dog。请注意,前导冒号后的符号与类名相同。