如何从ruby中的多行块写单行?

时间:2013-05-23 08:18:27

标签: ruby arrays methods block

我试图从数组(@controller)为每个实体编写单行块,这个单块的目的是从控制器数组中得到[n]元素,n是一个存取器,现在我想到了类似的东西:

def for_controller
 controller = @controllers.first[n] 
 yield controller
end

我写的单块不幸没有用,但下面的多行块在循环中完美运行。

def for_all_controllers
  @controllers.each do |controller|
    yield controller
  end
end

使问题更清晰:

@controllers[0] should yield => something_1
@controllers[1] should yield => something_2
@controllers[n] should yield => something_(n+1)

我怎样才能让它发挥作用?

2 个答案:

答案 0 :(得分:0)

这是你在找什么?

def for_controller
 yield @controllers[n]
end

答案 1 :(得分:0)

您的示例代码看起来错了。

@controllers.first[n]

这将从数组中获取@controller.first返回的第n个元素。

但在你的问题中,你说:

  

从控制器数组中产生[n]元素

我认为您期望数据结构(a),而不是(b)。

(a)
@controllers = [
  'something',    # <= @controller.first returns this element, as you expected
  'something',
  'something'
]

(b)
@controller = [
  ['something', 'something', 'something'],
  ['something', 'something', 'something'],
  ['something', 'something', 'something']
]

我认为你应该尝试以下:

@controllers.first(n)

它从@controller返回第一个第n个元素。这是你期望的结果吗,对吗?