Обычно символы используются в качестве хэш-ключей, потому что они save memory and are a little faster for comparisons и begin..end
блок не является необходимым. Таким образом, становится:
options[:host] = (a == :jaxon ? 'jaxon-server16.jaxon.local' : 'doric-server5')
Это сравнительно долгое время, в моей голове следующий разбирает проще:
options[:host] = 'doric-server5'
options[:host] = 'jaxon-server16.jaxon.local' if a == :jaxon
Итерация на вершине того, что у вас есть то, что, как представляется, полу- жестко закодированные значения (jaxon-server16.jaxon.local
и doric-server5
). Вы должны хранить их в константах или другой структуре данных, чтобы собрать их в одном месте. Например, если doric-server5
становится doric-server6
в один прекрасный день, вам нужно будет только изменить его в верхней части класса или файла. Кроме того, он упрощает чтение кода, поскольку теперь у них есть более гуманные имена того, что они представляют.
# somewhere else:
JAXON_SERVER = 'jaxon-server16.jaxon.local'
DORIC_SERVER = 'doric-server5'
options[:host] = DORIC_SERVER
options[:host] = JAXON_SERVER if a == :jaxon
Поскольку мы имели дело с первоначальной мотивацией чтобы сделать его две линии, мы могли бы вернуться к одному, хорошо линия:
options[:host] = (a == :jaxon ? JAXON_SERVER : DORIC_SERVER)
Если у вас есть много такого рода заявления, вы можете сделать хэш-код server
, где, например, server[:jaxon] = 'jaxon-server16.jaxon.local'
, но если у вас всего две, две строковые константы в порядке.
В некоторых случаях лучше использовать параметр по умолчанию (в данном случае DORIC_SERVER
), где бы оно не было по умолчанию для этого значения, вместо того, чтобы напрямую устанавливать значение по умолчанию для узла. Hash#fetch
принимает два аргумента: ключ и значение по умолчанию, если этот ключ не существует.
options[:host] = JAXON_SERVER if a == :jaxon
# somewhere else:
options.fetch(:host, DORIC_SERVER)
Без дополнительной информации трудно сказать, какой подход является лучшим в вашем случае.:-)
Нет, это не пахнет, только вкус немного экзотичен. –
@BorisStitnicky: Я бы сказал, что это использование 'begin..end' не очень распространено. –