LINQ ToList()的Ruby等价物

LINQ ToList()的Ruby等价物,ruby,Ruby,我是Ruby的新手,我该怎么做?用C#,我会写 my_block().ToList() 这会奏效的 我在想象这个函数 def my_block yield 1 yield 2 yield 3 end my_block.to_enum().map {|a| a} 这给了我一个错误: test.rb:2:in `my_block': no block given (yield) (LocalJumpError) from test.rb:7:in `<m

我是Ruby的新手,我该怎么做?用C#,我会写

my_block().ToList() 
这会奏效的

我在想象这个函数

def my_block
    yield 1
    yield 2
    yield 3
end

my_block.to_enum().map {|a| a}
这给了我一个错误:

test.rb:2:in `my_block': no block given (yield) (LocalJumpError)
    from test.rb:7:in `<main>'
test.rb:2:in'my_block':没有给出块(yield)(LocalJumpError)
来自test.rb:7:in`'

这种行为的正确咒语是什么

代码的正确语法是:

to_enum(:my_block).to_a # => [1,2,3]
应使用方法名称作为其参数的符号:

到枚举(方法=:每个,*args)
枚举(方法=:每个,*args)

创建一个新的枚举器,该枚举器将通过调用obj上的方法进行枚举

C#
ToList()
的等效值为

到a→ 数组
条目→ 排列

返回包含枚举中的项的数组


您可以更改函数,使其返回可枚举的值。下面是一个这样的例子:

def foo
  Enumerator.new do |y|
    y << 1
    y << 2
    y << 3
  end
end

p foo        # => <Enumerator: #<Enumerator::Generator:0x1df7f00>:each>
p foo.to_a   # => [1, 2, 3]
p foo.map { |x| x + 1 }  # => [2, 3, 4]
def foo
Enumerator.new do|y|
y[2,3,4]
然后,您可以在其上使用可枚举模块中的任何方法:


如果调用标准库中的许多ruby函数时没有传递一个块,那么它们将返回一个可枚举函数,但是如果传递一个块,它们将向该块生成值。你也可以这样做。

酷,我不知道。稍加修改,ruby 1.9中的此类函数将返回,而不是可枚举的,因为你可能在答案中输入错误。枚举器包括可枚举模块。是的。函数返回的对象是枚举数,也是可枚举的<代码>foo.is_a?(可枚举)返回true。对于多重继承,我认为可以说一个对象是多重的。我并不特别关心函数是否返回枚举数,我只关心它是否返回枚举数,因为这决定了我是否可以在函数上使用所有有用的方法,如
collect
select
。谢谢David,我不知道这个方法。我可以看到它有助于构建性能更好的库Alex的方法更简洁,更符合我的需要,并且不需要我更改被调用的函数,只需要更改调用方。尽管如此,你的答案仍然是正确的。但我想我只能有一个答案。。。