Надеюсь, это помогает кому-то - я провел 2 часа, стукнувшись головой:
В IE8 или IE9, если вы вообще запускаете ввод файла с помощью javascript (поверьте, что я попробовал их все), он не позволит вам отправить форму с помощью javascript, она просто будет терпеть неудачу.
Отправка формы с помощью обычной кнопки отправки может работать, но вызов form.submit ();
Мне пришлось прибегнуть к наложению кнопки выбора файла с прозрачным файловым входом, который работает.
я нашел следующий отрывок при чтении источника для
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 . - тарифицируют Ящерицу
Как это:
people = []
begin
info = gets.chomp
people += [Person.new(info)] if not info.empty?
end while not info.empty?
Как насчет этого?
people = []
until (info = gets.chomp).empty?
people += [Person.new(info)]
end
ppl = []
while (input=gets.chomp)
if !input.empty?
ppl << input
else
p ppl; puts "Goodbye"; break
end
end
Вот полный текст статьи с мертвой ссылки 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