标签:cha 作用域 self 局部变量 binding print Ruby id
举个栗子, 在文件作用域中定义两个变量, 然后直接在函数里修改它们的值, 之后再在文件作用域输出看看变量的值是否被改变:
a = 4
b = 7
self.print(a.object_id(), " ", b.object_id(), "\n")
def cha()
a = 8
b = 9
self.print(a.object_id(), " ", b.object_id(), "\n")
end
cha()
self.print(a, " ", b, "\n")
console输出(每次运行都有可能不一样):
9 15
17 19
4 7
当a和b的被赋值成8和9之后, 他们的对象id已经变了, 说明a和b指向了8和9这两个新的Number对象, 所以回到文件作用域后a和b的值并没有改变.
解决办法一般是把文件作用域的a和b改成全局变量@a和@b, 不过还有一种办法是使用binding, 把对象的上下文保留在代码中的某个特定的位置, 供将来使用.
a = 4
b = 7
def cha(binding)
binding.local_variable_set(:a, 6)
binding.local_variable_set(:b, 8)
end
cha(binding)
self.print(a, " ", b, "\n")
console标准输出:
$ 6 8
标签:cha,作用域,self,局部变量,binding,print,Ruby,id 来源: https://www.cnblogs.com/charleswbarkley/p/13027107.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。