草庐IT

enumerators

全部标签

ruby - Array和Enumerable有什么关系?

Array没有sort_by;Enumerable有它。这是如何工作的?%w[aaaaaaaaa].sort_by{|item|item.length}#=>['aa','aaa','aaaa']这不是必须抛出类似undefinedmethodsort_by的错误吗?Array和Enumerable有什么关系? 最佳答案 Array类包含Enumerable模块。您可以在左侧“包含的模块”下的文档中看到这一点。 关于ruby-Array和Enumerable有什么关系?,我们在Stack

ruby - 在 irb 中抑制 Enumerable::each 的输出

Enumerable::each的返回值是调用each的对象。当我在irb中时,这真的很烦人,因为我得到了巨大的输出。是否可以在irb中抑制Enumerable::each的返回值?比如这个[1,2].each{|u|puts"hey"}输出这个>>[1,2].each{|u|puts"hey"}heyhey=>[1,2]我想去掉最后一行 最佳答案 这很简单。只需在Ruby中您不想看到其返回值的语句/表达式的末尾添加一个分号(;)并添加nil.制作:[1,2].each{|u|puts"hey"};nil但请注意,没有理由压制irb

ruby - 将几个 Enumerables 变成一个

有没有办法让多个Enumerable对象显示为单个Enumerable而无需将其展平为数组?目前我已经写了一个这样的类,但我觉得必须有一个内置的解决方案。classEnumerablesincludeEnumerabledefinitialize@enums=[]enddef作为一个简单的例子,它需要能够像这样接受无限枚举器。inf=Enumerator.new{|y|a=1;loop{y 最佳答案 好吧,这可以通过使用Enumerator的标准库来完成.这种方法的优点是它返回可能被映射、减少等的真实枚举数。MULTI_ENUM=l

ruby-on-rails - 我应该在 NilClass 中包含 Enumerable 吗?

在我使用过的Rails应用程序中非常常见的错误之一是nil类错误。具体来说,我经常看到类似“NoMethodError:undefinedmethod‘each’fornil:NilClass”这样的错误。这些很烦人,通常是良性的,并且到处都是可怕的nil检查代码。这是一个例子:[3]pry(main)>deftest(enum)[3]pry(main)*enum.each{|x|putsx}[3]pry(main)*end=>nil[4]pry(main)>test(nil)NoMethodError:undefinedmethod`each'fornil:NilClassfrom(

ruby - 在 Ruby 中循环遍历 Enumerator 的其余部分

我在某个序列的中间有一个枚举器:enum=(1..9).eachfirst=enum.nextsecond=enum.next现在我想循环遍历序列的其余部分(3..9个数字)。但是看起来很明显的解决方案(例如在python中工作),从序列的开头而不是第三项重新开始:foriteminenumputsitemend#prints1..9insteadof3..9我发现的工作解决方案看起来很丑陋:beginwhileitem=enum.nextputsitemendrescueStopIterationend所以问题是:有没有更好的ruby解决方案来做这件事?为什么Ruby中的for循环会

ruby - 为什么在 Array 已经是 Enumerable 时使用 Array#to_enum?

据我了解,Array类已经混合在Enumerable模块中。如果是这样,为什么没有[:example].next?为什么我需要让它成为[:example].to_enum.next? 最佳答案 to_enum与Enumerable无关,它返回一个Enumerator。Array没有next方法,因为next是Enumerator方法,而不是Enumerable方法。 关于ruby-为什么在Array已经是Enumerable时使用Array#to_enum?,我们在StackOverfl

ruby - Enumerable 循环上的计数迭代

我想使用像[1,2,3].cycle这样的枚举器来计算我经历了多少次迭代。[1,2,3].cycle.count创建一个无限循环并且不带迭代计数。我在玩纸牌游戏,它在玩家之间循环。在游戏中很容易说:@round=0if@turn==1@round+=1end并且有效。但我想知道如何更改count或只为具有cycle的枚举器添加iter到这样的东西:moduleEnumerabledefcyclesuperdefcountputs"Hi"endendend由于Ruby中的一切都是对象,因此我应该能够在函数内创建函数,因为这种情况有效:defxdefyputs1endendx.y#=>1如

ruby - Hash 是否覆盖 Enumerable#map()?

鉴于map()是由Enumerable定义的,Hash#map如何yield两个变量到它的block?Hash是否覆盖Enumerable#map()?为了好玩,这里有一个小例子:ruby-1.9.2-p180:001>{"herp"=>"derp"}.map{|k,v|k+v}=>["herpderp"] 最佳答案 它不会覆盖mapHash.new.method(:map).owner#=>Enumerable它产生两个变量,收集到一个数组中classNumsincludeEnumerabledefeachyield1yield1

ruby - "test".partition( "s") 从 Enumerable 模块而不是 String 模块调用分区

我尝试使用partitionmethodfromtheStringmodule对字符串进行分区.但是,这样做时:puts"test".partition("s")我收到以下错误消息:Line1:in`partition':wrongnumberofarguments(1for0)(ArgumentError)fromt.rb:1我相信Ruby调用了partitionmethodfromtheEnumerablemodule,而不是我想要的来自String模块的那个。如何让Ruby调用所需的方法? 最佳答案 作为injekt已经指出,

ruby - 在 Enumerable#each_cons 中跳过 'n' 次迭代

在执行eachblock时是否可以跳过n次迭代?persons.each_cons(2)do|person|ifperson[0]==person[1]#SKIP2iterationsendputs"Howdy?#{person[0]}"end 最佳答案 只需使用Enumerator明确地:persons=[1,2,1,1,1,3]enum=persons.each_cons(2)loopdop1,p2=enum.nextifp1==p22.times{enum.next}elseputs"Howdy?#{p1}"endend一些注