小编use*_*869的帖子

是否可以声明一个带有 block 作为默认值的方法?

我想编写一个方法,它接受一个块,如果没有给出块,则应该使用默认块。所以我想要这样的东西:

def say_hello(name, &block = ->(name) { puts "Hi, #{name}" })
  # do something
end 
Run Code Online (Sandbox Code Playgroud)

但是当我尝试这样做时,我收到语法错误。

我知道我可以使用block_given?. 但我对第一种方法感兴趣。我错过了什么还是这是不可能的?

ruby lambda block

5
推荐指数
1
解决办法
797
查看次数

Perl用于Ruby的__SUB__类比

在Perl中,我们可以__SUB__用来获取当前子例程的引用.Ruby有类似的吗?

例如,让我们在Perl中编写一个匿名的factorial子例程:

my $fact = sub {
    $_[0] > 1 ? $_[0] * __SUB__->($_[0] - 1) : 1;
};
Run Code Online (Sandbox Code Playgroud)

在Ruby中,我首先创建一个命名方法,然后将其转换为lambda:

def factorial(n) 
  n > 1 ? n * factorial(n - 1) : 1
end

fact = method(:factorial).to_proc
Run Code Online (Sandbox Code Playgroud)

我觉得这不是编写递归lambda的最佳方法.我错过了什么?

ruby lambda

5
推荐指数
1
解决办法
95
查看次数

标签 统计

lambda ×2

ruby ×2

block ×1