是否可以引用传递给ruby中传递块内的方法的参数?

时间:2012-05-16 22:21:41

标签: ruby block

我希望我不会在这里重复任何人,但我一直在搜索谷歌和这里,而不是想出任何东西。这个问题更多的是将我的代码“性化”。

我特意想做的是:

Dir.new('some_directory').each do |file|
  # is there a way to refer to the string 'some_directory' via a method or variable?
end

谢谢!

3 个答案:

答案 0 :(得分:7)

不一般;这完全取决于方法本身调用块的参数,并且在调用时间each(调用块)时,字符串'some_directory'被传递给{{1很久以前就被遗忘了,即它们是完全不同的东西。

你可以这样做:

Dir.new

答案 1 :(得分:2)

它不起作用的原因是neweach是两种不同的方法,因此它们无法访问彼此的参数。要对代码进行“性别化”,您可以考虑创建一个新方法来包含两个方法调用,并将重复的参数传递给它:

def do_something(dir)
  Dir.new(dir).each do |file|
    # use dir in some way
  end
end

创建一个新方法具有如此低的开销这一事实意味着为这一小块代码创建一个代码是完全合理的 - 这也是使Ruby成为一种语言工作乐趣的众多原因之一用。

答案 2 :(得分:0)

将其分解为变量。 Ruby块是闭包,所以他们可以访问 -

dir = 'some_directory'
Dir.new(dir).each do |file|
  # use dir here as expected.
end