0

我正在尝试为数组(@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)

我怎样才能让它工作?

4

2 回答 2

0

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

@controllers.first[n]

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

但在你的问题中,你说:

从控制器数组中产生 [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 个元素。这是你预期的结果,对吧?

于 2013-05-23T09:17:08.827 回答
0

是你要找的吗?

def for_controller
 yield @controllers[n]
end
于 2013-05-23T08:53:47.583 回答