2015-11-05 16 views
-1

有人可以請解釋我做錯了什麼。爲什麼一直在說未定義的方法?

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

有什麼確切* *消息時,它給你,包括行號,當您運行示例代碼?告訴我們它沒有定義是好的,但是Ruby告訴你更多,所以準確地告訴我們它說什麼通常很重要。見[問]。 –

回答

1

裏面你fc方法,代碼不知道什麼fb是。在這種情況下,fafb都沒有意義。 (fa不會拋出相同的錯誤,因爲您也在進行分配,但除此之外)。

要在您的fc方法中使用fafb,您需要傳遞它們。試試這個:

fb = 2 
fa = 100 

def fc(fa, fb) 
    fa - fb 
end 

puts "#{fa}" 

fa = fc(fa, fb) 

puts "#{fa}" 
0

功能FC不能使用變量FA或FB,因爲他們是從它的範圍(我們說的功能沒有「關閉」對這些變量)排除在外。一個PROC或lambda確實有一個封閉:

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

提到一個proc或lambda可能會超過OP的頭,因爲範圍不被理解。 –

1

fafb變量在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 
相關問題