Есть ли & ldquo; do & hellip; в то время как & Rdquo; цикл в рубине?

Надеюсь, это помогает кому-то - я провел 2 часа, стукнувшись головой:

В IE8 или IE9, если вы вообще запускаете ввод файла с помощью javascript (поверьте, что я попробовал их все), он не позволит вам отправить форму с помощью javascript, она просто будет терпеть неудачу.

Отправка формы с помощью обычной кнопки отправки может работать, но вызов form.submit ();

Мне пришлось прибегнуть к наложению кнопки выбора файла с прозрачным файловым входом, который работает.

442
задан Jeremy Ruten 25 September 2008 в 23:15
поделиться

6 ответов

я нашел следующий отрывок при чтении источника для Tempfile#initialize в оперативной библиотеке Ruby:

begin
  tmpname = File.join(tmpdir, make_tmpname(basename, n))
  lock = tmpname + '.lock'
  n += 1
end while @@cleanlist.include?(tmpname) or
  File.exist?(lock) or File.exist?(tmpname)

На первый взгляд, я принял, в то время как модификатор будет оценен, прежде чем содержание начинает... конец, но дело не в этом. Наблюдайте:

>> begin
?>   puts "do {} while ()" 
>> end while false
do {} while ()
=> nil

, Как Вы ожидали бы, цикл продолжит выполняться, в то время как модификатор верен.

>> n = 3
=> 3
>> begin
?>   puts n
>>   n -= 1
>> end while n > 0
3
2
1
=> nil

, В то время как я был бы рад никогда не видеть эту идиому снова, начните..., конец довольно мощен. Следующее является общей идиомой к memoize метод остроты без параметрических усилителей:

def expensive
  @expensive ||= 2 + 2
end

Вот является ужасный, но быстрый путь к memoize чем-то более сложным:

def expensive
  @expensive ||=
    begin
      n = 99
      buf = "" 
      begin
        buf << "#{n} bottles of beer on the wall\n" 
        # ...
        n -= 1
      end while n > 0
      buf << "no more bottles of beer" 
    end
end

Первоначально записанный Jeremy Voorhis . Содержание было скопировано здесь, потому что это, кажется, было удалено от инициирующего сайта. Копии могут также быть найдены в веб-Архив и в Форум Шума Ruby . - тарифицируют Ящерицу

188
ответ дан River 25 September 2008 в 23:15
поделиться

Как это:

people = []

begin
  info = gets.chomp
  people += [Person.new(info)] if not info.empty?
end while not info.empty?

Ссылка: Ruby Скрылся, делают {} в то время как () Цикл

101
ответ дан Grant 25 September 2008 в 23:15
поделиться

Как насчет этого?

people = []

until (info = gets.chomp).empty?
  people += [Person.new(info)]
end
43
ответ дан AndrewR 25 September 2008 в 23:15
поделиться
ppl = []
while (input=gets.chomp)
 if !input.empty?
  ppl << input
 else
 p ppl; puts "Goodbye"; break
 end
end
-3
ответ дан 22 November 2019 в 23:07
поделиться

Вот полный текст статьи с мертвой ссылки hubbardr на мой блог.

Читая исходный текст Tempfile#initialize в основной библиотеке Ruby, я обнаружил следующий фрагмент:

begin
  tmpname = File.join(tmpdir, make_tmpname(basename, n))
  lock = tmpname + '.lock'
  n += 1
end while @@cleanlist.include?(tmpname) or
  File.exist?(lock) or File.exist?(tmpname)

На первый взгляд, я предположил, что модификатор while будет оцениваться перед содержимым begin...end, но это не так. Обратите внимание:

>> begin
?>   puts "do {} while ()" 
>> end while false
do {} while ()
=> nil

Как и следовало ожидать, цикл будет продолжать выполняться, пока модификатор истинен.

>> n = 3
=> 3
>> begin
?>   puts n
>>   n -= 1
>> end while n > 0
3
2
1
=> nil

Хотя я был бы рад никогда больше не видеть эту идиому, begin...end является довольно мощным средством. Ниже приведена распространенная идиома для мемоизации однострочного метода без параметров:

def expensive
  @expensive ||= 2 + 2
end

Вот уродливый, но быстрый способ мемоизации чего-то более сложного:

def expensive
  @expensive ||=
    begin
      n = 99
      buf = "" 
      begin
        buf << "#{n} bottles of beer on the wall\n" 
        # ...
        n -= 1
      end while n > 0
      buf << "no more bottles of beer" 
    end
end
11
ответ дан 22 November 2019 в 23:07
поделиться
a = 1
while true
  puts a
  a += 1
  break if a > 10
end
3
ответ дан 22 November 2019 в 23:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: