Условия Синатры


Изучив Руби около месяца, я решил перейти к Синатре. Мне нужна помощь в понимании фрагмента Синатры, который иллюстрирует условия и маршрут. Может ли кто-то четко объяснить, что происходит по строкам и как этот блок на самом деле рандомизирует маршрут?

set(:probability) { |value| condition { rand <= value } }

  get '/win_a_car', :probability => 0.1 do
    "You won!"
  end

  get '/win_a_car' do
    "Sorry, you lost."
  end
1 5

1 ответ:

Общее поведение этого приведет к тому, что первый маршрут будет загружен примерно в 10% случаев, а второй маршрут будет загружен в остальное время.

Первый маршрут использует условие, установленное через вероятность. вероятность, установленная выше, будет проходить свое значение и тест, чтобы увидеть, если случайный # между 0-1 меньше, чем это значение вероятности. Так как значение равно 0.1, он будет возвращать true 10% времени.

Остальные 90% времени будет вызываться 2-й маршрут. Более ранние маршруты берут предпочтения, будет вызван первый найденный допустимый маршрут.

Если вы хотите задать вероятность в другом параметре, вам нужно будет отложить оценку вероятности с помощью Proc.

Подробнее об условных маршрутах читайте здесь: http://www.sinatrarb.com/intro#Conditions