Почему rand (переменная) останавливает выполнение моей программы Shoes? - PullRequest
2 голосов
/ 18 мая 2011

Я новичок в Обуви, и я пытаюсь создать простой ролик для игры в кости, который позволяет пользователю выбирать кубик нестандартного размера, вводя количество сторон. Мой код выглядит следующим образом:

Shoes.app :width => 500, :height => 300 do
 flow do
   para "Sides: "
   @sides = edit_line
 end
 flow do
   button "Roll!" do
     @total = 1 + rand(sides)
     alert @total
   end
 end
end

Я ввожу число в строку редактирования, нажимаю кнопку, и ничего не происходит.

Если я заменим @total = rand(sides) на @total = rand(20), программа выполнится просто отлично, но, конечно, выдает только случайные числа от 1 до 20.

Я пробовал варианты вроде rand(@sides), но безрезультатно.

Я разработал аналогичную программу на простом Ruby, которая без проблем использует rand(sides), но если я попытаюсь сделать это в Shoes, она ничего не сделает.

Ответы [ 2 ]

1 голос
/ 18 мая 2011

У вас есть пара ошибок. Во-первых, используйте @sides, а не sides. Таким образом, вы ссылаетесь на ту же переменную, которую вы установили ранее.

Во-вторых, тип @sides равен Shoes::EditLine. Что хорошо, так как вам нужно искать текст динамически. Если вам нужен текст @sides, вызовите @sides.text, который возвращает String. Конечно, в этом контексте вам необходимо преобразовать это число в целое число, подходящее для ввода в rand, поэтому вы будете использовать @sides.text.to_i.

(Конечно, применяются стандартные предупреждения о недоверии пользователям. На самом деле вы захотите проверить свои входные данные на предмет неверного ввода и сделать что-нибудь полезное.)

Короче говоря, замените @total = 1 + rand(sides) на @total = 1 + rand(@sides.text.to_i) и все будет хорошо.

0 голосов
/ 18 мая 2011

edit_line возвращает объект String.Вам нужно сначала преобразовать его в целое число с помощью @sides = edit_line.to_i

...