比如
def change(a) a=Array.new(4,0) end num=[1,2,3,4,5,6,7,8,9,10] change(letters) puts letters
怎么才能在 change 方法里把 num 变成一个新的数组
def change(a) #do something exm: a.collect{} // 新的数组 end num = [1,2,3,4,5,6,7,8,9,10] num = change(num) puts num # 如果是实例变量可以这样 def change @num.collect!{|i| i+1} end @num = [1,2,3,4] change puts @num => [2,3,4,5]
使用实例变量,或者全局变量(不建议用)
可以用 lambda
change = lambda do num = [1] end change.call
2.3.4 :001 > num = [1,2,3] => [1, 2, 3] 2.3.4 :002 > define_method :change do 2.3.4 :003 > num = Array.new(4,0) 2.3.4 :004?> end => :change 2.3.4 :005 > num => [1, 2, 3] 2.3.4 :006 > change => [0, 0, 0, 0] 2.3.4 :007 > num => [0, 0, 0, 0] 2.3.4 :008 >
不知道你是不是想要这个? 这个是扁平化作用域
简单来说,不建议这么做。
详细来说,因为我不知道 LZ 原本面对的问题具体是怎样的,所以不便直接给出答案。这很有可能是个 XY Problem:https://ruby-china.org/topics/7154
最简单的就是用Array#replace方法,对于immutable的变量,如果你非要这么做 https://github.com/CicholGricenchos/tricks/tree/master/caller_context_operate