def gen_times(factor) do
return Proc.new {|n| n*factor}
end
gen_times.class # ArgumentError 0 for 1
gen_times(3).class # Proc
gen_times = 2
gen_times.class # Fixnum
times3 = gen_times(3) # A normal, working Proc
Первый gen_times.class дает ArgumentError, поэтому я предполагаю, что он возвращает имя класса возвращаемого значения gen_times, что подтверждается в следующей строке.Локальные переменные и методы с тем же именем в Ruby?
Но тогда я назначаю gen_times, и он становится Fixnum. Тем не менее, я все еще могу использовать gen_times для возврата Procs.
Напомню, что объекты Fixnum имеют непосредственные значения и что сам объект используется в присваивании, а не как ссылка на него.
Итак, правильно ли сказать, что gen_times является объектом Fixnum, который ссылается на метод?
Локальные переменные и локальные функции могут работать с одинаковыми именами. Чтобы четко различать их, можно было бы использовать скобки. – mudasobwa
Мне нужно было прочитать это несколько раз, чтобы выяснить, о чем вы спрашиваете. Я думаю, было бы лучше, если бы вы показали результаты запуска кода внутри самого кода, либо в виде комментариев, либо в формате «Я пробовал это: ... и тогда это произошло: ... поэтому я попробовал это: ... и тогда это произошло: ... " –