在size的文档中,我们可以读到here,'size()是长度的别名'。对于length(doc)“返回self中的元素数。可能为零。”那个长度“也别名为:大小”。功能可能非常相似,但我想知道不同的实现是否包含除了返回数组或集合中的元素数之外的任何其他功能。length和size这两个词似乎暗示着不同,特别是因为size会让我想到以字节为单位的内存大小而不是元素的数量。 最佳答案 完全一样的实现。你可以在sourcecodeofRuby2.3.1中看到那是一个别名:rb_define_alias(rb_cArray,"size","
在Ruby和RoR中,我经常发现自己测试对象是否存在,然后对象的属性是否符合某些条件。像这样:ifparams[:id]&¶ms[:id].size==40...dostuffend有没有更有效的方法来做到这一点?像这样的东西:ifparams[:id].size==40rescuefalse但没有使用救援? 最佳答案 在Rails2.3中,您可以使用Object#try方法:ifparams[:id].try(:size)==40#dostuffendtry在nil上调用(带任何参数)时将返回nil。希望这是有道理的。
给定array=[:a,:b,:c,:d]#with4elements:array[3]=>:d#zero-basedindices,Igetthatarray[4]=>nilarray[5]=>nilarray[3,0]=>[]#OKsinceIaskedforaslicewithzeroelementsarray[start,length]的Doco说它“如果索引(或起始索引)超出范围则返回nil。”array[5,0]=>nil#OKarray[4,0]=>[]#Hunh??comearray[4,0]如何返回一个数组而不是nil?[edit]看起来这已经出现了:参见Arrays
当Range用作Array下标时,我注意到一个奇怪的行为。(至少对我来说很奇怪。)a=[1,2,3]=>[1,2,3]a[3]=>nila[3..-1]=>[]a[4]=>nila[4..-1]=>nil我以为a[3..-1]返回nil,但不知何故它返回[]。a[-3..-4]也返回[]。当我使用范围的边际值时,谁能解释为什么它返回[]? 最佳答案 因为当range.begin==array.length时,它总是返回[]。这在theRubydocumentation中被称为“特殊情况”:a=["a","b","c","d","e"
我想说user1比user2早4小时,这是根据用户在其帐户中指定的时区计算的。使用以下代码:time1=Time.zone.now.in_time_zone(user1.time_zone)time2=Time.zone.now.in_time_zone(user2.time_zone)distance_of_time_in_wordstime1,time2...相差不到一分钟-同样减去两次得到0。Rails显然仍然认为这两次相同。知道如何计算两个时区之间的差异吗? 最佳答案 如果您使用time1实例并对其调用utc_offset,
我有以下测试:it'createaction:auserrepliestoapostforthefirsttime'dologin_asuser#ActionMailergoesupbytwobecauseauserwhocreatedatopichasanaccompanyingpost.#Oneemailforpostcreation,anotherforpostreplies.assert_difference(['Post.count','ActionMailer::Base.deliveries.size'],2)dopost:create,topic_id:topic.id
使用我并不出色的Google技能,我未能找到适合Ruby程序员的Groovy教程。有很多政治文章(Ruby很棒!Groovy很棒!)和微小的对比,但我真的不在乎哪个更好。我比较了解Ruby(和Java),我想学习Groovy。有人会关心(提供一个惊人的链接或)标记两种语言在如何做事(句法、类声明、循环、block等)方面的一些差异吗?出于我的目的,您可以假设具备完整的Java能力来进行解释。同样,我对知道哪个更好不感兴趣。只需要知道如何做事.... 最佳答案 如果您了解Java,那么您能读到的最好的东西就是如何在Groovy中使用元
我对一个大的整数vector进行了广泛的计算。在计算过程中vector大小不会改变。vector的大小经常被代码访问。通常更快的是:使用vector::size()函数还是使用辅助常量vectorSize存储vector的大小?我知道编译器通常能够在设置正确的编译器标志时内联size()函数,但是,使函数内联是编译器可以做但不能强制的事情。 最佳答案 有趣的问题。那么,会发生什么?好吧,如果您使用gdb进行调试,您会看到类似3个成员变量(名称不准确):_M_begin:指向动态数组第一个元素的指针_M_end:指针越过动态数组的最后
我对一个大的整数vector进行了广泛的计算。在计算过程中vector大小不会改变。vector的大小经常被代码访问。通常更快的是:使用vector::size()函数还是使用辅助常量vectorSize存储vector的大小?我知道编译器通常能够在设置正确的编译器标志时内联size()函数,但是,使函数内联是编译器可以做但不能强制的事情。 最佳答案 有趣的问题。那么,会发生什么?好吧,如果您使用gdb进行调试,您会看到类似3个成员变量(名称不准确):_M_begin:指向动态数组第一个元素的指针_M_end:指针越过动态数组的最后
我简化了示例。假设我有一个包含正则表达式代码的字符串。我希望正则表达式匹配一个文字点,因此我希望它是:\.所以我创建了以下Ruby字符串:"\\."然而,当我将它与Regexp.union一起使用来创建我的正则表达式时,我得到了这个:irb(main):017:0>Regexp.union("\\.")=>/\\\./这将匹配一个斜杠后跟一个点,而不仅仅是一个点。将之前的结果与此进行比较:irb(main):018:0>Regexp.new("\\.")=>/\./它给出了我想要的正则表达式,但没有所需的联合。您能解释一下为什么Ruby会那样做以及如何正确地合并正则表达式吗?使用的上下