为什么一直说未定义的方法?

时间:2015-11-05 00:02:58

标签: ruby

有人可以解释一下我做错了什么。

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

3 个答案:

答案 0 :(得分:1)

fc方法中,代码不知道fb是什么。在这种情况下,fafb都毫无意义。 (fa不会抛出同样的错误,因为你也在做任务,但除此之外还有。)

要在fa方法中使用fbfc,您需要传递它们。试试这个:

fb = 2
fa = 100

def fc(fa, fb)
  fa - fb
end

puts "#{fa}"

fa = fc(fa, fb)

puts "#{fa}"

答案 1 :(得分: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

答案 2 :(得分:0)

函数fc不能使用变量fa或fb,因为它们被排除在其范围之外(我们说函数没有"关闭"超过这些变量)。 proc或lambda确实有一个闭包:

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