2015-11-05 3 views
-1

Не мог бы кто-нибудь объяснить, что я делаю неправильно.Почему он продолжает говорить о неопределенном методе?

fb = 2 
fa = 100 
def fc 
    fa = fa - fb 
end 
puts "#{fa}" 
fc 
puts "#{fa}" 
+0

Что * точное * сообщение дает вам, в том числе и номер строки, при запуске примера кода? Говорить нам, что это неопределенно, это хорошо, но Руби говорит вам больше, поэтому точно расскажите нам, что он сказал, поскольку это часто бывает значительным. См. [Ask]. –

ответ

1

Внутри вашего метода 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}" 
0

Функции Ь не может использовать переменные фа или Ф.Б., как они исключены из сферы (мы говорим, что функция не имеет «замыкания» над этими переменными). Процедурный или лямбда имеет замыкание:

fb = 2 
    fa = 100 
    fc = proc { 
     fa = fa - fb 
    } 
    puts "#{fa}" 
    fc.call 
    puts "#{fa}" 
+1

Упоминание proc или лямбда, вероятно, над головой OP, так как область видимости не понята. –

1

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 
Смежные вопросы