溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Ruby 2.4有什么新特征

發(fā)布時間:2021-07-07 17:42:36 來源:億速云 閱讀:148 作者:chen 欄目:編程語言

本篇內(nèi)容主要講解“Ruby 2.4有什么新特征”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“Ruby 2.4有什么新特征”吧!

按照過去幾年的傳統(tǒng), Ruby核心團隊在圣誕節(jié)發(fā)布了新的Ruby版本。 我將在這里總結(jié)Ruby 2.4中一些有趣的新函數(shù)。

以前的: Ruby 2.3 。

Numbers

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

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" }

Strings,Symbols和IO

字符串支持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

Enumerable#sum

(1..5).sum         #=> 15%w(a b c).sum('')  #=> "abc"

文件和目錄

#empty?方法已添加到 Dir ,FilePathname

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

Language特征

在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í)!

向AI問一下細(xì)節(jié)

免責(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)容。

AI