iT邦幫忙

2023 iThome 鐵人賽

DAY 24
0
Software Development

從餐飲業轉職成小白工程師的所見所學系列 第 24

ruby 中的 Block 是什麼? Day24

  • 分享至 

  • xImage
  •  

今天我們來看看 ruby 裡面的 block。

Block 不是物件

大家熟知的在 Ruby 裡面幾乎所有東西都是物件,但還是有少數的例外,Block 就不是物件。因此 Block 沒有辦法單獨的存在,也沒辦法把它指定給某個變數,像這樣的寫法都會造成語法錯誤(Syntax Error):

## 語法錯誤
{ puts "Hello, World" }
action = { puts "Hello, World" }

Block 是什麼?

block 是包含程式碼的匿名函數,他可以傳遞給其他方法當作參數。

  1. 定義 Block

在 Ruby 裡面我們可以使用 {}、do...end 來定義 block

# 使用 {}
do_something { |param| puts param }

# 使用 do...end
do_something do |param|
  puts param
end

  1. 傳遞 Block

Ruby 可以接受一個或多個 block 作為參數,可以使用 yield 來傳遞參數給 blok

def my_method
  yield("Hello, world!")
end

my_method { |message| puts message }
## 輸出 "Hello, world"
  1. Block 參數

在方法定義當中,我們可以使用 &block 來接受 blcok 做為一個參數。

def my_method(&block)
  block.call("Hello, block!")
end

my_method { |message| puts message }
## 輸出 "Hello, block!"
  1. Block 作為 Proc 對象

Block 可以被轉換為 Proc 對象,使得我們可以儲存、重複使用、傳遞 block。

my_proc = Proc.new { |x| x * 2 }
puts my_proc.call(3) # 輸出 6
  1. Block 的回傳值

在 Block 的最後一行的執行結果會自動變成 Block 的回傳值

def my_method
  result = yield
  puts "Block回傳值:#{result}"
end

my_method do
  5 + 3  # block的最後一行,回傳 8
end

這樣對 Block 有沒有更了解了呢?
明天來介紹 Lambda、Proc。


上一篇
HTTP Method? Day23
下一篇
Proc? Lambda? Day25
系列文
從餐飲業轉職成小白工程師的所見所學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言