我有一个基本的红宝石课程:
class LogEntry
end
我想要做的是能够定义一个具有几个值的哈希:
EntryType = { :error => 0, :warning => 1, :info => 2 }
这样我就可以访问像这样的值(或类似的东西):
LogEntry.EntryType[:error]
这在Ruby中是否可行?我正确地走这条路吗?
答案 0 :(得分:7)
你可以这样做:
class LogEntry
EntryType = { :error => 0, :warning => 1, :info => 2 }
end
但你想把它作为
引用LogEntry::EntryType[:error]
答案 1 :(得分:1)
或者你可以创建一个类方法:
class LogEntry
def self.types
{ :error => 0, :warning => 1, :info => 2 }
end
end
# And a simple test
LogEntry.types[:error].should be_an_instance_of(Hash)
答案 2 :(得分:0)
为什么需要哈希?
你能不只是在LogEntry类上声明条目类型?
class LogEntry
@@ErrorType = 0
End
LogEntry.ErrorType
答案 3 :(得分:0)
我很好奇为什么你不能让@error_type成为LogEntry实例上的实例变量?
class LogEntry
attr_reader :type
ERROR_RANKING = [ :error, :warning, :info, ]
include Comparable
def initialize( type )
@type = type
end
def <=>( other )
ERROR_RANKING.index( @type ) <=> ERROR_RANKING.index( other.type )
end
end
entry1 = LogEntry.new( :error )
entry2 = LogEntry.new( :warning )
puts entry1.type.inspect
#=> :error
puts entry2.type.inspect
#=> :warning
puts( ( entry1 > entry2 ).inspect )
#=> false
puts( ( entry1 < entry2 ).inspect )
#=> true
但另请参阅Ruby的内置日志记录库Logger。