Batu delima


Anda sudah tahu cara Ruby mentakrifkan kaedah dan cara anda memanggilnya. Begitu juga, Ruby mempunyai konsep blok. Blok

  • terdiri daripada sejumlah besar kod.

  • Anda perlu memberi nama pada blok itu. Kod dalam blok

  • sentiasa disertakan dalam pendakap kerinting {}. Blok

  • sentiasa dipanggil daripada fungsi dengan nama yang sama dengannya. Ini bermakna jika nama blok anda ialah test, maka anda mahu menggunakan fungsi test untuk memanggil blok ini.

  • Anda boleh menggunakan pernyataan hasil untuk memanggil blok.

Syntax

block_name{
   statement1
   statement2
   ..........
}

Di sini anda akan belajar cara memanggil blok menggunakan pernyataan hasil yang mudah. Anda juga akan belajar cara memanggil blok menggunakan pernyataan hasil dengan parameter. Dalam contoh, anda akan melihat kedua-dua jenis pernyataan hasil.

hasil Penyata

Mari kita lihat contoh pernyataan hasil:

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

def test
   puts "在 test 方法内"
   yield
   puts "你又回到了 test 方法内"
   yield
end
test {puts "你在块内"}


Hasil daripada contoh di atas ialah :

在 test 方法内
你在块内
你又回到了 test 方法内
你在块内

Anda juga boleh menghantar pernyataan hasil dengan parameter. Berikut ialah contoh:

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

def test
   yield 5
   puts "在 test 方法内"
   yield 100
end
test {|i| puts "你在块 #{i} 内"}


Hasil contoh di atas ialah:

你在块 5 内
在 test 方法内
你在块 100 内

Di sini, pernyataan hasil diikuti mengikut parameter. Anda juga boleh melepasi berbilang parameter. Dalam blok, anda meletakkan pembolehubah antara dua bar menegak untuk menerima parameter. Jadi, dalam kod di atas, pernyataan hasil 5 melepasi nilai 5 sebagai parameter kepada blok ujian.

Sekarang, lihat kenyataan berikut:

test {|i| puts "你在块 #{i} 内"}

Di sini, nilai 5 akan diterima dalam pembolehubah i. Sekarang, perhatikan pernyataan puts berikut:

puts "你在块 #{i} 内"

Output pernyataan puts ini ialah:

你在块 5 内

Jika anda ingin lulus berbilang parameter, maka pernyataan hasil kelihatan seperti ini :

yield a, b

Pada ketika ini, blok kelihatan seperti ini:

test {|a, b| statement}

Parameter dipisahkan dengan koma.

Blok dan Kaedah

Anda telah melihat bagaimana blok dan kaedah berkaitan antara satu sama lain. Anda biasanya menggunakan pernyataan hasil untuk memanggil blok daripada kaedah yang mempunyai nama yang sama dengannya. Oleh itu, kodnya kelihatan seperti ini:

#!/usr/bin/ruby

def test
  yield
end
test{ puts "Hello world"}

Contoh ini ialah cara paling mudah untuk melaksanakan blok. Anda memanggil blok ujian menggunakan pernyataan hasil.

Tetapi jika parameter terakhir kaedah didahului oleh &, maka anda boleh menghantar blok ke kaedah dan blok boleh diberikan kepada parameter terakhir. Jika * dan & muncul dalam senarai parameter pada masa yang sama, & harus diletakkan selepas.

#!/usr/bin/ruby

def test(&block)
   block.call
end
test { puts "Hello World!"}


Hasil contoh di atas ialah:

Hello World!

MULA dan TAMAT blok

Setiap fail sumber Ruby boleh diisytiharkan apabila fail dimuatkan Blok kod untuk dijalankan apabila atur cara menyelesaikan pelaksanaan (blok BEGIN), dan blok kod untuk dijalankan selepas atur cara menyelesaikan pelaksanaan (blok END).

#!/usr/bin/ruby

BEGIN { 
  # BEGIN 代码块
  puts "BEGIN 代码块"
} 

END { 
  # END 代码块
  puts "END 代码块"
}
  # MAIN 代码块
puts "MAIN 代码块"

Sesuatu program boleh mengandungi berbilang blok BEGIN dan END. Blok BEGIN dilaksanakan mengikut susunan ia muncul. Blok TAMAT dilaksanakan dalam susunan terbalik di mana ia muncul. Apabila dilaksanakan, program di atas menghasilkan hasil berikut:

BEGIN 代码块
MAIN 代码块
END 代码块