#ruby
#ruby
Вопрос:
Есть ли в Ruby способ заменить операторы ‘if’ для функции, чтобы сделать код более читаемым?
if Environ == :windows
puts 'windows'
else
if Environ == :linux
puts 'linux'
else
puts 'other environment'
end
end
Я хочу заменить вышеуказанные блоки такими:
windows{
puts 'windows'
}
linux{
puts 'linux'
others{
puts 'other environment'
}
}
Комментарии:
1. Рассмотрите возможность использования
elsif
илиcase
вместо изобретения новых методов, которые читатель должен искать, чтобы понять.2. Ваш код излишне сложен. Объедините строки
else
иif Environ == :linux
elsif Environ == :linux
и удалите финалend
. При изучении нового языка чрезмерное отвлечение на отвлечения — это потеря времени.
Ответ №1:
Вы можете определить функцию, которая принимает блок, но нет смысла (и на самом деле невозможно) вкладывать other
его внутрь linux
.
def windows
yield if Environ == :windows
end
def linux
yield if Environ == :linux
end
def other
yield if Environ != :windows amp;amp; Environ != :linux
end
windows {
puts 'windows'
}
linux {
puts 'linux'
}
other {
puts 'other'
}
Лучшим решением в этом случае может быть простое case
утверждение:
case Environ
when :windows then puts "windows"
when :linux then puts "linux"
else puts "other"
end
Комментарии:
1. Вы можете
case
немного свернуть, переместивputs
внешнюю частьcase
.2. @tadman Я подозреваю
puts
, что существует только для демонстрации ветвления и отсутствует в реальном коде — тем более в виде одиночных операторов3. @tadman Это код-заполнитель. Если бы целью было просто
puts
что-то, весь вопрос можно было бы заменить наputs Environ.to_s