您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“Ruby 2.4有什么新特征”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“Ruby 2.4有什么新特征”吧!
按照過去幾年的傳統(tǒng), Ruby核心團隊在圣誕節(jié)發(fā)布了新的Ruby版本。 我將在這里總結(jié)Ruby 2.4中一些有趣的新函數(shù)。
以前的: Ruby 2.3 。
Fixnum
和 Bignum
已統(tǒng)一為Integer
類。
到目前為止,我們有兩個用于存儲整數(shù)的類- Fixnum
(表示小整數(shù)), Bignum
(表示超出此范圍的數(shù)字)。 但是,這些是實施細(xì)節(jié) 程序員在編寫代碼時無需擔(dān)心。
這兩個類已由單個 Integer
類代替。 以前, Integer
是這兩個類的超類, 但現(xiàn)在 Fixnum
和 Bignum
都是Integer
。
# 2.342.class #=> Fixnum(2**62).class #=> Bignum# 2.442.class #=> Integer(2**62).class #=> IntegerFixnum == Integer #=> trueBignum == Integer #=> true
函數(shù)#12005:將Fixnum和Bignum統(tǒng)一為整數(shù)
Tanaka Akira的幻燈片
Ruby 2.4將Fixnum和Bignum統(tǒng)一為Integer (BigBinary博客)
新的Integer#digits
方法
42.digits #=> [2, 4]
浮點修飾符的精度
Float
方法,例如#ceil
,#floor
,#truncate
和#round
采用可選參數(shù)設(shè)置精度。
1.567.round #=> 21.567.round(2) #=> 1.57123.456.round(-1) #=> 120
Float#round
默認(rèn)行為保持不變
這不是真的改變, 但是默認(rèn)行為的這種變化最初使它成為一種預(yù)覽版本, 后來又恢復(fù)了。
默認(rèn)情況下,#round
使用上舍入行為,即。 1.5將四舍五入為2。 新的行為是使用銀行家的四舍五入,將四舍五入到最接近的偶數(shù)。 這可能會導(dǎo)致許多現(xiàn)有應(yīng)用程序中依賴于上舍入四舍五入的錯誤, 因此保留了原始默認(rèn)設(shè)置。
# suggested behavior1.5.round #=> 22.5.round #=> 2# actual behavior1.5.round #=> 22.5.round #=> 3
Float#round
選項
即使恢復(fù)了從最近到最近的變化, Float#round
中引入了新選項 允許您顯式設(shè)置要使用的舍入類型。
2.5.round #=> 32.5.round(half: :even) #=> 22.5.round(half: :down) #=> 22.5.round(half: :up) #=> 3
binding.irb
我非常喜歡 binding.pry
方法的pry gem,該方法可以在運行代碼時打開REPL。 IRB現(xiàn)在已經(jīng)引入了此函數(shù),并且當(dāng)ruby遇到 binding.irb
時,ruby現(xiàn)在會打開一個REPL。
Hash#compact
此方法以及bang版本的#compact!
, 從哈希中刪除值為nil的鍵。
{ a: "foo", b: false, c: nil }.compact#=> { a: "foo", b: false }
Hash#transform_values
將塊應(yīng)用于哈希中的每個值。 還提供了用于修改現(xiàn)有哈希的#transform_values!
方法。 文檔中的示例:
h = { a: 1, b: 2, c: 3 } h.transform_values {|v| v * v + 1 } #=> { a: 2, b: 5, c: 10 } h.transform_values(&:to_s) #=> { a: "1", b: "2", c: "3" }
字符串支持Unicode大小寫映射
到目前為止,Ruby僅對ASCII字符執(zhí)行大小寫轉(zhuǎn)換。 String
和Symbols
現(xiàn)在已擴展為可以使用unicode字符。
# 2.3"Türkiye".upcase #=> "TüRKIYE""TüRK?YE".downcase #=> "türk?ye"# 2.4"Türkiye".upcase #=> "TüRKIYE""TüRK?YE".downcase #=> "türki?ye"
函數(shù)#10085:將非ASCII大小寫轉(zhuǎn)換添加到String#upcase,#downcase,#swapcase,#capitalize
指定字符串緩沖區(qū)大小
String.new
現(xiàn)在允許capacity
參數(shù) 指定緩沖區(qū)的大小。 這將帶來性能上的好處 當(dāng)字符串將被多次連接時。
String.new('foo', capacity: 1_000)
Symbol#match
現(xiàn)在類似于 String#match
Symbol#match
用于返回匹配位置, 而 String#match
返回了 MatchData
對象。 這已在2.4中修復(fù),現(xiàn)在都返回 MatchData
。
# 2.3:hello_ruby.match(/ruby/) #=> 6# 2.4:hello_ruby.match(/ruby/) #=> #<MatchData "ruby">
IO#gets
和其他方法會獲得斷斷續(xù)續(xù)的標(biāo)志
現(xiàn)在,您可以添加一個可選的 chomp:true
標(biāo)志到 #gets
,#readline
,#each_line
,#readlines
和 IO.foreach
。
# In 2.3, you did this foo = gets.chomp # 2.4 foo = gets(chomp: true)
Regexp#match?
此新方法返回true或false,而不更新$?
全局變量。 由于它不會創(chuàng)建 MatchData
對象或更新 $?
對象, 它的效果要優(yōu)于#match
。
/foo/.match?('foo') #=> true$~ #=> nil
Regexp#named_captures
返回表示有關(guān)命名捕獲的信息的哈希。
/(?<fname>.+) (?<lname>.+)/.match('Ned Stark').named_captures#=> {"fname"=>"Ned", "lname"=>"Stark"}
Enumerable#sum
(1..5).sum #=> 15%w(a b c).sum('') #=> "abc"
#empty?
方法已添加到 Dir
,File
和Pathname
。
Dir.empty?('path/to/some/dir') #=> trueFile.empty?('path/to/some/file') #=> truerequire 'pathname' # Needed to use Pathname classPathname.new('file-or-dir').empty? #=> true
在Ruby 2.3中,您會收到語法錯誤 如果您在條件中嘗試了多次分配。 它已改為警告。
# 2.3 if (a,b = [1,2]) then 'yes' else 'no' end #=> SyntaxError: (irb):9: multiple assignment in conditional # 2.4 if (a,b = [1,2]) then 'yes' else 'no' end #=> warning: found = in conditional, should be == #=> 'yes' if (a,b = nil) then 'yes' else 'no' end #=> warning: found = in conditional, should be == #=> 'no'
到此,相信大家對“Ruby 2.4有什么新特征”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。