附加到闭包

时间:2015-06-26 12:26:07

标签: ruby closures

我有以下关闭:

def func
  def inner_func
    list << 3 # how to append an element to the outer `list`?
  end

  list = []
  inner_func
  list
end

我不确定如何从listinner_func添加内容,因为上述尝试是错误的。

2 个答案:

答案 0 :(得分:2)

使用实例方法,如下所示:

def func
  def inner_func
    @list << 3 # how to append an element to the outer `list`?
  end

  @list = []
  inner_func
  @list
end

但请看一下this - 关于Ruby和嵌套方法。

干净的解决方法示例:

def func
  list = []
  inner_func list # => [3]
  inner_func list # => [3, 3]
end

def inner_func(list)
  list << 3
end

答案 1 :(得分:2)

Ruby没有嵌套方法。它确实有lambda,恰好是闭包。

def func
  list = []
  l = ->{ list << 3}
  l.call
  p list
end

func # => [3]