91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

Ruby 2.7有什么新特征

發布時間:2021-07-06 18:05:34 來源:億速云 閱讀:133 作者:chen 欄目:編程語言

本篇內容介紹了“Ruby 2.7有什么新特征”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

自Ruby 2.1.0起, Ruby核心團隊每年圣誕節都發布了新版本的Ruby, 這次我們得到了2.7.0。 這可能是Ruby的最新2.x版本, 因為Ruby 3.0有望在明年圣誕節發布。

這是一個簡短的摘要 此發行版中一些最有趣的函數。 (有關以前的版本,請參閱: 2.6 , 2.5 , 2.4 , 2.3 )。

模式匹配

引入了新的模式匹配語法, 它允許您編寫如下的case語句:

def test_pattern(value)
  case value
  in 0
    'Zero'
  in Integer if value < 0
    'Negative'
  in Integer => n
    "Number #{n}"
  in { value: x }
    "Hash value: #{x}"
  in _
    'Unknown'
  end
end

test_pattern(-1)            #=> 'Negative'
test_pattern(0)             #=> 'Zero'
test_pattern(2)             #=> 'Number: 2'
test_pattern({ value: 3 })  #=> 'Hash value: 3'
test_pattern('four')        #=> 'Unknown'

無起點范圍

在2.6中,我們獲得了無限范圍, 這次我們將有無起點的范圍。 這將允許使用如下語法:

case n
when ..0  then 'Negative'
when 1..9 then 'Single digit'
when 10.. then 'Two or more'
end

另一個有趣的用途 將是在DSL中使用此函數的能力。 例如, 我們可以在ActiveRecord中做到這一點:

Task.where(due_on: ..Date.today)

編號參數

添加了新語法 將編號的參數添加到塊中。

(1..3).map { _1 * _1 } #=> [1, 4, 9]

hash = { a: 2, b: 3 }
hash.map { "#{_1} = #{_2}" } #=> ["a = 1", "b = 2"]

add_3 = -> { _1 + _2 + _3 }
add_3.call(3, 5, 7) #=> 15

這些是人為的例子, 但到目前為止,我還不認為值得添加這種新語法, 而且我看不出自己在明確的論點上使用了它。

新枚舉和數組方法

Enumerable#tally 計算一個枚舉中每個項目的出現, 并將其作為哈希值返回。

strings = ['a', 'a', 'a', 'b', 'c']
strings.tally
#=> { 'a' => 3, 'b' => 1, 'c' => 1 }

# in 2.6, we'd do it like this:
strings.each_with_object({}) do |value, result|
  result[value] ||= 0
  result[value] += 1
end

Enumerable#filter_map 結合了select map合并為一個塊, 避免了中間數組分配的需要。

# squares of odd numbers in 1..10
(1..10).filter_map { |x| x*x if x.odd? } #=> [1, 9, 25, 49, 81]

# ruby 2.6
(1..10).select(&:odd?).map { |x| x*x }

Array#intersection 與在數組上調用&等效,但是允許多個參數。

[1,2,3,4,5].intersection([2,3,4], [2,4,5]) #=> [2, 4]

Enumerator::Lazy#eager會將惰性枚舉數轉換為非惰性枚舉數。

(1..).lazy
  .select(&:odd?)    # lazy
  .take(3)           # lazy
  .eager             # next operation will be non-lazy
  .map { |x| x * x } #=> [1, 9, 25]

參數轉發語法

添加了新語法( ... )以允許 轉發方法的所有參數。

def add(a, b)
  a + b
end

def add_and_double(...)
  add(...) * 2
end

add_and_double(2, 3) #=> 10

Args關鍵字棄用

在先前的Ruby版本中, 如果您有一個帶有關鍵字參數的方法, 并以哈希作為最后一個參數來調用它, 哈希將被轉換為關鍵字args。 但是,此方法已被棄用 以期在3.0中刪除此行為。 現在,這將引起警告。

def foo(key: 1)
  key
end

foo({ key: 2 })
#=> 43
# warning: The last argument is used as the keyword parameter
# warning: for `foo' defined here

splat運算符可用于將哈希轉換為關鍵字args。

foo(**{ key: 2 })

Self調用 private方法

private的行為已略有變化。 以前,如果您在self上調用了私有方法, (例如 self.foo ), 將提示 NoMethodError錯誤。 現在通過self 調用私有方法不再引發錯誤。

除了添加的所有新函數之外, 這個版本也很有趣 對于某些沒有切入的函數。 

引入了管道運算符(pipeline), 如下示例

# with pipeline
foo
  |> bar 1, 2
  |> display

# normal method chaining
foo
  .bar(1, 2)
  .display

引入了方法參考運算符(method reference) 然后刪除。 這本來可以寫作 File.method(:read)作為 File.:read 

some_uri
  .then(&Net::HTTP.:get)
  .then(&JSON.:parse)

之所以被恢復,是因為 Matz和核心團隊 想重新考慮更廣泛的設計 關于函數式編程的函數 可以在Ruby中使用。

“Ruby 2.7有什么新特征”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

安新县| 台山市| 太仆寺旗| 八宿县| 耒阳市| 沛县| 永登县| 麦盖提县| 汉寿县| 辽阳县| 竹溪县| 姜堰市| 淳化县| 永清县| 庆元县| 锦屏县| 阿拉尔市| 铜鼓县| 宜章县| 石屏县| 秀山| 阿克| 汽车| 高邑县| 霍州市| 民和| 吉安县| 麟游县| 称多县| 华阴市| 江津市| 宜黄县| 弥渡县| 新建县| 金平| 二连浩特市| 静宁县| 华安县| 霸州市| 兴安县| 时尚|