키의 클래스 기호를 참조하는 해시를 만들고 싶습니다. 예를 들어, 특정 클래스를 참조하는 색상이있는 값 배열. 지금까지 구현 한 내용은 다음과 같습니다.Ruby에서 심볼이있는 클래스를 어떻게 참조합니까?
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")
"기호가있는 수업 참조"는 무엇을 의미합니까? 클래스를 포함하여 무엇이든 해시 키로 사용할 수 있습니다. –
디자인 적으로 'AnimalColours'에는 동물이 어떤 색을 사용할 수 있는지에 대한 코드가 포함될 것입니다. 그 코드는 각각의 동물 클래스에 있어야합니다. 'AnimalColours'는 _all_ colors에 포괄적 인 코드만을 포함해야합니다. – Max
왜 기호로 변환합니까? 문자열은이 경우에도 똑같이 잘 작동하지만 큰 영향을 미치지는 않지만 기호가 동결되어 GC에 의해 선택되지 않으므로 더 많은 메모리를 소비합니다. 그들은 class_variable에 있기 때문에 그것은 GC'd되지 않을 것이기 때문에별로 중요하지 않습니다. 예를 들어 2.2.0을 신경 쓰는 사람들을위한 새로운 기능은 실제로 [C- 레벨 외부에서 생성 된 GC 심볼] (https://bugs.ruby-lang.org/issues/9634) – engineersmnky