Ruby: определение хеша уровня класса со значениями по умолчанию - PullRequest
5 голосов
/ 26 ноября 2008

у меня есть базовый класс рубина:

class LogEntry

end

и что я хотел бы сделать - это определить хэш с несколькими значениями, например:

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

чтобы я мог получить доступ к таким значениям (или что-то подобное):

LogEntry.EntryType[:error]

это вообще возможно в Ruby? я иду об этом правильный путь?

Ответы [ 4 ]

7 голосов
/ 26 ноября 2008

Вы можете сделать это:

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

Но вы хотите сослаться на него как

LogEntry::EntryType[:error]
1 голос
/ 26 ноября 2008

В качестве альтернативы вы можете создать метод класса:

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)
0 голосов
/ 27 ноября 2008

Мне любопытно, почему вы не можете просто сделать @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 .

0 голосов
/ 26 ноября 2008

Зачем вам хеш?

Не можете ли вы просто объявить типы записей в классе LogEntry?

class LogEntry
  @@ErrorType = 0
End

LogEntry.ErrorType
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...