Есть ли способ удалить Ifs и использовать вместо этого функции

#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