您好,登錄后才能下訂單哦!
本篇內容主要講解“Ruby 2.4有什么新特征”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Ruby 2.4有什么新特征”吧!
按照過去幾年的傳統, Ruby核心團隊在圣誕節發布了新的Ruby版本。 我將在這里總結Ruby 2.4中一些有趣的新函數。
以前的: Ruby 2.3 。
Fixnum
和 Bignum
已統一為Integer
類。
到目前為止,我們有兩個用于存儲整數的類- Fixnum
(表示小整數), Bignum
(表示超出此范圍的數字)。 但是,這些是實施細節 程序員在編寫代碼時無需擔心。
這兩個類已由單個 Integer
類代替。 以前, Integer
是這兩個類的超類, 但現在 Fixnum
和 Bignum
都是Integer
。
# 2.342.class #=> Fixnum(2**62).class #=> Bignum# 2.442.class #=> Integer(2**62).class #=> IntegerFixnum == Integer #=> trueBignum == Integer #=> true
函數#12005:將Fixnum和Bignum統一為整數
Tanaka Akira的幻燈片
Ruby 2.4將Fixnum和Bignum統一為Integer (BigBinary博客)
新的Integer#digits
方法
42.digits #=> [2, 4]
浮點修飾符的精度
Float
方法,例如#ceil
,#floor
,#truncate
和#round
采用可選參數設置精度。
1.567.round #=> 21.567.round(2) #=> 1.57123.456.round(-1) #=> 120
Float#round
默認行為保持不變
這不是真的改變, 但是默認行為的這種變化最初使它成為一種預覽版本, 后來又恢復了。
默認情況下,#round
使用上舍入行為,即。 1.5將四舍五入為2。 新的行為是使用銀行家的四舍五入,將四舍五入到最接近的偶數。 這可能會導致許多現有應用程序中依賴于上舍入四舍五入的錯誤, 因此保留了原始默認設置。
# suggested behavior1.5.round #=> 22.5.round #=> 2# actual behavior1.5.round #=> 22.5.round #=> 3
Float#round
選項
即使恢復了從最近到最近的變化, Float#round
中引入了新選項 允許您顯式設置要使用的舍入類型。
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現在已經引入了此函數,并且當ruby遇到 binding.irb
時,ruby現在會打開一個REPL。
Hash#compact
此方法以及bang版本的#compact!
, 從哈希中刪除值為nil的鍵。
{ a: "foo", b: false, c: nil }.compact#=> { a: "foo", b: false }
Hash#transform_values
將塊應用于哈希中的每個值。 還提供了用于修改現有哈希的#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字符執行大小寫轉換。 String
和Symbols
現在已擴展為可以使用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"
函數#10085:將非ASCII大小寫轉換添加到String#upcase,#downcase,#swapcase,#capitalize
指定字符串緩沖區大小
String.new
現在允許capacity
參數 指定緩沖區的大小。 這將帶來性能上的好處 當字符串將被多次連接時。
String.new('foo', capacity: 1_000)
Symbol#match
現在類似于 String#match
Symbol#match
用于返回匹配位置, 而 String#match
返回了 MatchData
對象。 這已在2.4中修復,現在都返回 MatchData
。
# 2.3:hello_ruby.match(/ruby/) #=> 6# 2.4:hello_ruby.match(/ruby/) #=> #<MatchData "ruby">
IO#gets
和其他方法會獲得斷斷續續的標志
現在,您可以添加一個可選的 chomp:true
標志到 #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,而不更新$?
全局變量。 由于它不會創建 MatchData
對象或更新 $?
對象, 它的效果要優于#match
。
/foo/.match?('foo') #=> true$~ #=> nil
Regexp#named_captures
返回表示有關命名捕獲的信息的哈希。
/(?<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有什么新特征”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。