Tag: 可枚举

词语产量的含义

目前我正在阅读David A. Black的“The Well-Grounded Rubyist”,我坚持10.9章(枚举器和可枚举的下一个维度)。 我的问题是关于yield方法。 Ruby上下文中yield这个词的含义是什么? 我的母语是俄语,谷歌翻译给我看了一堆翻译变体,让我感到困惑。 其中有一些: 给予 , 带来 , 投降 ( 放弃 ), 生产 , 同意 , 遵守和许多其他人。 UPD:请注意这个事实,我试图理解Enumerator :: Yielder#yield方法的含义,但不是yield关键字本身。 UPD_2:我发现了有关枚举器的有趣文章:“ Ruby中的懒惰枚举器 ”。

带有rubycollections品/枚举的酷技巧和富有表现力的片段

你最喜欢的ruby系列代码片段是什么? 优选地,它们应该是您的发现,具有表现力,可读性,并在您的编码实践中引入一些乐趣。 数组中的模式匹配(用于局部变量和参数): (a, b), c = [[:a, :b], :c] [a,b,c] => [:a, :b, :c] (a,), = [[:a]] a => :a 从非数组分配到多个变量: abc, a, b =* “abc”.match(/(a)(b)./) => [“abc”, “a”, “b”] nil1, =* “abc”.match(/xyz/) => [] 使用相同的表达式初始化数组元素: 5.times.map { 1 } => [1,1,1,1] Array.new(5) { 1 } => [1,1,1,1,1] 使用相同的值初始化数组: [2]*5 =>[2,2,2,2,2] Array.new 5, 2 […]

Ruby块采用数组或多个参数

今天我很惊讶地发现ruby自动找到作为块参数给出的数组的值。 例如: foo = “foo” bar = “bar” p foo.chars.zip(bar.chars).map { |pair| pair }.first #=> [“f”, “b”] p foo.chars.zip(bar.chars).map { |a, b| “#{a},#{b}” }.first #=> “f,b” p foo.chars.zip(bar.chars).map { |a, b,c| “#{a},#{b},#{c}” }.first #=> “f,b,” 我原以为最后两个例子会给出一些错误。 这是ruby中更一般概念的一个例子吗? 我不认为我的问题开头的措辞是正确的,我怎么称呼这里发生的事情?

产生或返回Enumerator的ruby方法

在最近的Ruby版本中, Enumerable许多方法在没有块的情况下调用时返回一个Enumerator : [1,2,3,4].map #=> # [1,2,3,4].map { |x| x*2 } #=> [2, 4, 6, 8] 我想在我自己的方法中做同样的事情,如下: class Array def double(&block) # ??? end end arr = [1,2,3,4] puts “with block: yielding directly” arr.double { |x| px } puts “without block: returning Enumerator” enum = arr.double enum.each { |x| px }

如何从Ruby可枚举中获取列表?

我知道Python的list方法可以使用生成器中的所有元素。 Ruby中有类似的东西吗? 我知道 : elements = [] enumerable.each {|i| elements << i} 我也知道inject替代品。 有一些现成的方法吗?

如何创造无数可数的时代?

我希望能够让一个对象在Ruby中扩展Enumerable,成为一个无限的星期一列表(例如)。 所以它会产生:3月29日,4月5日,4月12日……等等 我怎样才能在Ruby中实现它?

Rails列表有.first和.second – 有.hundredth或.sixty_nineth吗?

是否有一个Rails的类或其他扩展,允许超过一系列(和最后一个)中的前几个元素? 这些工作: [2,45,2,14,53,23,634,346,34,46,643,634,346,34,34].fifth # -> 53 [2,45,2,14,53,23,634,346,34,46,643,634,346,34,34].last # -> 34 那么在哪里? list.sixth list.hundredth

Enumerable的group_by是否保留了Enumerable的顺序?

Enumerable#group_by是否保留每个值中的原始顺序? 当我得到这个: [1, 2, 3, 4, 5].group_by{|i| i % 2} # => {1=>[1, 3, 5], 0=>[2, 4]} 是否保证,例如,数组[1, 3, 5]按此顺序包含元素而不是,例如[3, 1, 5] ? 有关于这一点的描述吗? 我没有提到键1和0之间的顺序。 这是一个不同的问题。

帮助理解Ruby中的yield和枚举器

如果有人能帮我理解在枚举器中使用Yielder与在枚举器中调用yield之间的区别,我将不胜感激。 “有根据的Rubyist”表明,人们不会“从块中屈服”,但并不能准确地解释正在发生的事情。 谢谢

按编号(最高的第一个)然后按字母(按字母顺序)对对象的集合进行排序

我正在建立一个小部件,以显示奥运会的奖牌数量。 我有一个“国家”对象的集合,其中每个对象都有一个“名称”属性,而“金”,“银”,“青铜”用于奖牌计数。 列表应该排序:1。首先通过总奖牌数2.如果相同的奖牌,按类型分类(金>银>铜,即两金> 1金+ 1银)3。如果相同的奖牌和类型,子 – 按字母顺序排列 我在ruby中这样做,但我认为语言并不重要。 我确实找到了一个解决方案,但如果感觉必须有更优雅的方式来做到这一点。 这是我做的: 使用加权奖牌总数创建虚拟属性。 因此,如果他们有2金和1银,加权总数将是“3.020100”。 1金,1银和1铜将是“3.010101” 由于我们希望将奖牌计数排在最前面,因此列表是按DESC排序的。 但是之后我们想要按字母顺序(即ASC)进行子排序。 所以我创建了一个字母反转单词的函数(即“canada”=>“xzmzwz”) 将加权总数转换为字符串,将反转名称连接起来(即“3010101xzmzwz”),然后按降序排序。 瞧。 到目前为止,有人已经想出如何在大约2行代码中做同样的事情。 关心赐教?