gpt4 book ai didi

主要的 Ruby 作用域

转载 作者:太空宇宙 更新时间:2023-11-03 17:14:55 25 4
gpt4 key购买 nike

我想了解为什么这段代码不起作用:

array = [1,2,3]

def display_size()
puts "self from method: #{self}"
puts "Size from method: #{array.size}"
end

puts "self from main: #{self}"
puts "Size from main: #{array.size}"
display_size()

错误的输出:

$ ruby scope.rb 
self from main: main
Size from main: 3
self from method: main
scope.rb:5:in `display_size': undefined local variable or method `array' for main:Object (NameError)
from scope.rb:10:in `<main>'

我推测这是一个范围界定问题。我想这意味着方法中有一个新的范围,其中 array 不可见。

最初我希望变量与方法在同一范围内,因为它们都在 main 上定义...

最佳答案

确实这是一个范围界定问题。如果你希望 array 在该方法中可访问,请将其更改为 @array

@array = [1,2,3]

def display_size()
puts "self from method: #{self}"
puts "Size from method: #{@array.size}"
end

puts "self from main: #{self}"
puts "Size from main: #{@array.size}"
display_size()

array 是局部变量,仅在局部作用域内。

@array 是一个实例变量,在同一个类中的任何地方都可用。

如果您想避免创建实例变量,则需要将数组传递给您的方法。

array = [1,2,3]

def display_size(array)
puts "self from method: #{self}"
puts "Size from method: #{array.size}"
end

puts "self from main: #{self}"
puts "Size from main: #{array.size}"
display_size(array)

关于主要的 Ruby 作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31858709/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com