为什么ruby方法没有词法范围?

前端之家收集整理的这篇文章主要介绍了为什么ruby方法没有词法范围?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
例如
  1. def test
  2. a = "a is for apple"
  3. def inner_method
  4. a = "something" # this will refer to a different "a"
  5. end
  6.  
  7. inner_method
  8. puts a
  9. end

这有什么理由吗?块有词法范围,为什么不用方法呢?这会被解决吗?

解决方法

这是因为Ruby的方法不是第一类对象(例如,它们将在 IO中).所以当你定义内部方法时,接收器是什么?大概是方法本身,或绑定或东西,但Ruby没有那么深的OO.

无论如何,我不清楚你期望在你的例子中发生什么,你想要它修改本地varialbe吗?如果是这样,proc是方法的合适替代品.

  1. def test
  2. a = "a is for apple"
  3. inner_method = lambda do
  4. a = "something"
  5. end
  6.  
  7. a # => "a is for apple"
  8. inner_method.call
  9. a # => "something"
  10. end
  11.  
  12. test

functional.rb”是这种编程风格的一个更奢侈的例子.

而“lambda,proc,and Proc.new”是Ruby不同类型闭包的细分.

猜你在找的Ruby相关文章