调用/应用lambda与函数调用-Ruby中的语法不同。为什么?

| 我是Ruby的新手,仍然尝试理解一些语言设计原则。如果我做对了,Ruby中的lambda表达式调用必须使用方括号,而“ regular”函数调用必须使用“ regular” /圆括号。 语法不同是否有特殊原因?或者换句话说,(为什么)调用者应该知道他们是调用函数还是应用lambda表达式?     
已邀请:
        因为在Ruby中,方法不是lambda(例如,在JavaScript中)。 方法始终属于对象,可以被继承(通过子类或混合),可以在对象的本征类中被覆盖,并且可以被赋予一个块(即lambda)。它们具有自己的变量范围。方法定义示例:
a = :some_variable
def some_method
  # do something, but not possible to access local variable a
end

# call with:
some_method
但是,lambdas / procs是纯闭包,可能存储在变量中-除此以外:
a = :some_variable
some_lambda = lambda{
  # do something, access local variable a if you want to
}

# call with:
some_lambda[]
Ruby将这两种方法与强大的语法结合在一起,例如,传递块:
def some_method_with_block(a)
  # do something, call given block (which is a lambda) with:
  yield(a) ? 42 : 21
end

# example call:
some_method_with_block(1) do |x|
  x.odd?
end #=> 42
    
        常规的Ruby方法调用使用
()
而不是用于块的花括号。如果您不喜欢
[]
调用lambda,则可以始终使用
call
方法。 例:
>> by_two = lambda { |x| x * 2 } #=> #<Proc:0x0000000101304588@(irb):1>
>> by_two[5] #=> 10
>> by_two.call(5) #=> 10
编辑 在较新版本的Ruby中:
>> by_two.(5) #=> 10
至于为什么不能只做“ 8”,当Ruby看到一个空字词时,它首先尝试将其解析为局部变量,如果该方法失败了。     
        如果需要括号,可以做
by_two = lambda { |x| x * 2 }
by_two.(5) # => 10
注意
by_two
(5)
之间的
.
。     

要回复问题请先登录注册