Не мог бы кто-нибудь объяснить, что я делаю неправильно.Почему он продолжает говорить о неопределенном методе?
fb = 2
fa = 100
def fc
fa = fa - fb
end
puts "#{fa}"
fc
puts "#{fa}"
Не мог бы кто-нибудь объяснить, что я делаю неправильно.Почему он продолжает говорить о неопределенном методе?
fb = 2
fa = 100
def fc
fa = fa - fb
end
puts "#{fa}"
fc
puts "#{fa}"
Внутри вашего метода fc
, код не знает, что fb
есть. В этом контексте как fa
, так и fb
бессмысленны. (fa
не выдает ту же ошибку, поскольку вы также выполняете задание, но это не так).
Чтобы использовать fa
и fb
в вашем методе fc
, вам необходимо передать их. Попробуйте это:
fb = 2
fa = 100
def fc(fa, fb)
fa - fb
end
puts "#{fa}"
fa = fc(fa, fb)
puts "#{fa}"
Функции Ь не может использовать переменные фа или Ф.Б., как они исключены из сферы (мы говорим, что функция не имеет «замыкания» над этими переменными). Процедурный или лямбда имеет замыкание:
fb = 2
fa = 100
fc = proc {
fa = fa - fb
}
puts "#{fa}"
fc.call
puts "#{fa}"
Упоминание proc или лямбда, вероятно, над головой OP, так как область видимости не понята. –
fa
и fb
переменные не определены в контексте метода fc
, поэтому метод fc
ничего о них не знает. Вы не можете использовать переменные внешнего пространства внутри такого метода. Вам необходимо пройти необходимые аргументы метода fc
:
fb = 2
fa = 100
def fc(fa, fb) # fc method takes two arguments: fa and fb
fa = fa - fb # Now, fc method knows about fa and fb variables/arguments
end
p fc(fa, fb) # pass fa and fb as arguments to the fc method
# => 98
Что * точное * сообщение дает вам, в том числе и номер строки, при запуске примера кода? Говорить нам, что это неопределенно, это хорошо, но Руби говорит вам больше, поэтому точно расскажите нам, что он сказал, поскольку это часто бывает значительным. См. [Ask]. –