首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将块重构为方法及其块参数的表达式

将块重构为方法及其块参数的表达式
EN

Stack Overflow用户
提问于 2017-10-09 11:45:20
回答 2查看 159关注 0票数 2
代码语言:javascript
复制
a = (1..5).select(&:even?).map do |s|
  s * 2
end
a #=> [4, 8] 

在Ruby中,我想将a的右侧表达式重构为一个方法和它的块参数。

代码语言:javascript
复制
def refactor
  (1..5).select(&:even?).map { |e| yield e }
end

def refactor2(&block)
  (1..5).select(&:even?).map(&block)
end

b = refactor do |s|
  s * 2
end
b #=> [4, 8]

使用refactorrefactor2,我可以得到我想要的东西。

但是,用块或前后在块和proc之间包装yield对我来说不太合适。

有没有更简洁的方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-09 15:54:16

如果需要将一个块传递给该方法,我将选择第二个选项。至少这样,该参数在方法签名中,并且它使它更明显地表明它是必需的。

此外,如果没有提供块,我将引发ArgumentError

代码语言:javascript
复制
def refactor(&block)
  raise ArgumentError.new("Block required") unless block

  (1..5).select(&:even?).map(&block)
end
票数 1
EN

Stack Overflow用户

发布于 2017-10-25 01:41:11

我发现Rails问题#30973红宝石杂志#14045回答了我的问题。

红宝石问题称,

如果不使用块参数,就无法将给定的块传递给其他方法。

所以除了refactorrefactor2

代码语言:javascript
复制
back and forth between block and proc does not feel right to me.

这是我真正关心的绩效问题。

Rails通过使用refactor方法来处理这个性能问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46645681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档