我想做一個哈希鍵,它指的是一個類的符號和一些數組的值,例如,指向那個特定類的顏色。到目前爲止,我的實現是這樣的:如何在Ruby中引用帶有Symbol的類?
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")
你是指「用符號引用一個類」是什麼意思?你可以使用任何東西作爲散列鍵,包括一個類。 – 2014-10-30 15:53:36
從設計角度來看,「AnimalColours」包含的動物可以是哪種顏色的代碼並沒有意義。該代碼應該在各自的動物類中進行。 'AnimalColours'應該只包含通用於_all_顏色的代碼。 – Max 2014-10-30 17:03:23
爲什麼要轉換爲符號?在這種情況下,字符串同樣可以發揮作用,而不會產生巨大的影響,但符號在被凍結時會消耗更多的內存,並且不會被GC所接收。雖然由於它們處於class_variable中,所以它不會太重要,因爲它不會被GC'd所佔用。雖然對於那些看護2.2.0的人來說可能會很好[在C級以外創建的GC符號](https://bugs.ruby-lang.org/issues/9634) – engineersmnky 2014-10-30 17:50:25