更自然的方式在Ruby 1.9中调用Proc

Ser*_*gey 5 ruby lambda proc

我们知道,在Ruby 1.9中有几种Proc调用方式

 f =->n {[:hello, n]}
 p f[:ruby]       # => [:hello, :ruby]
 p f.call(:ruby)  # => [:hello, :ruby]
 p f.(:ruby)      # => [:hello, :ruby]
 p f === :ruby    # => [:hello, :ruby]
Run Code Online (Sandbox Code Playgroud)

我很好奇,什么是更自然的方式调用Proc?"自然"可能意味着更多的计算机科学 - 就像这样.

Sim*_*tti 5

第二种选择是目前使用最多的选项.

p f.call(:ruby)  # => [:hello, :ruby]
Run Code Online (Sandbox Code Playgroud)

它使它更类似于标准方法.此外,在验证检查#call方法可用性的参数时,某些库实际上依赖于duck typing .在这种情况下,使用#call确保您可以提供响应的lambda或任何其他对象(包括类)#call.

Rack中间件是这个约定的一个很好的例子.基本中间件可以是lambda,也可以通过使用类来提供更复杂的逻辑.