Ruby:使用默认值定义类级别哈希

时间:2008-11-25 21:37:32

标签: ruby

我有一个基本的红宝石课程:

class LogEntry

end

我想要做的是能够定义一个具有几个值的哈希:

EntryType = { :error => 0, :warning => 1, :info => 2 }

这样我就可以访问像这样的值(或类似的东西):

LogEntry.EntryType[:error]

这在Ruby中是否可行?我正确地走这条路吗?

4 个答案:

答案 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