LINQ ToList()的Ruby等价物
我是Ruby的新手,我该怎么做?用C#,我会写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
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的方法更简洁,更符合我的需要,并且不需要我更改被调用的函数,只需要更改调用方。尽管如此,你的答案仍然是正确的。但我想我只能有一个答案。。。