1. 程式人生 > >Ruby語言基礎學習五:Ruby 方法、塊

Ruby語言基礎學習五:Ruby 方法、塊

#-*-coding:UTF-8 -*-

#Ruby方法
def test(a1="Ruby",a2="Perl") #設定預設引數,也可不設
	puts a1
	puts a2
end

test "C","C++" #加引數,不用括號
test #直接不用引數

# Ruby 中的每個方法預設都會返回一個值。這個返回的值是最後一個語句的值。
def test2
	i=100
	k="Is me"
end

j=test2
puts j

 # Ruby 中的 return 語句用於從 Ruby 方法中返回一個或多個值。
 def test3
 	i=1
 	j=2
 	k=3
 	return i,j,k
 end

 var=test3
 puts var

 # Ruby 允許您宣告引數數量可變的方法。
 def sample(*niu) #可變引數個數
 	puts "引數個數為 #{niu.length}" #niu.length求總數
 	for i in 0...niu.length #這裡面三個點在開始是0的地方很有用
 		puts "引數值為 #{niu[i]}" #可以用索引引用
 	end
 end

sample "Zara", "6", "F"
sample "Mac", "36", "M", "MCA"

# 當方法定義在類的外部,方法預設標記為 private。另一方面,如果方法定義在類中的,則預設標記為 public。
class Accounts
	def reading_charge #這個必須先例項化再引用
		puts "first"
	end
	def Accounts.return_data #這個算和類常量一樣的東西
		puts "Second"
	end
end

Accounts.return_data

# Ruby alias 語句
# 這個語句用於為方法或全域性變數起別名。別名不能在方法主體內定義。
# 為編號的全域性變數($1, $2,...)起別名是被禁止的。重寫內建的全域性變數可能會導致嚴重的問題。
def bar
end
alias foo bar #為 bar 定義了別名為 foo
alias $MATCH $& 

# Ruby undef 語句
# 這個語句用於取消方法定義。undef 不能出現在方法主體內。
undef bar

# 塊由大量的程式碼組成。可以增加程式碼複用
# 塊總是從與其具有相同名稱的函式呼叫。這意味著如果您的塊名稱為 test,那麼您要使用函式 test 來呼叫這個塊。
# 您可以使用 yield 語句來呼叫塊。

# 傳遞帶有引數的 yield 語句可以傳遞多個引數
def test5
	yield 5,5
	puts "在test方法內"
	yield 100 #這裡一個引數居然還能不報錯
end
test5 do
	|i,j| puts "你在塊#{i} #{j}內"
end


#這些竟然可以不呼叫自己執行,我加了test4呼叫會報錯
def test4
	puts "在 test 方法內 "
	yield #呼叫,把什麼東西喊出來
	puts "你又回到了 test方法內"
	yield #這個程式喊了兩次
end

test4{puts "我回來啦"}
#呼叫

# 但是如果方法的最後一個引數前帶有 &,那麼您可以向該方法傳遞一個塊,且這個塊可被賦給最後一個引數。如果 * 和 & 同時出現在引數列表中,& 應放在後面。
def test6 (&block)
	block.call #可以用這個呼叫塊
end
test6{puts "hello world!"}

# 每個 Ruby 原始檔可以聲明當檔案被載入時要執行的程式碼塊(BEGIN 塊),以及程式完成執行後要執行的程式碼塊(END 塊)。
BEGIN{
	puts "BEGIN 程式碼塊"
}
END{
	puts "END程式碼塊"
}
puts "MAIN 程式碼塊"
# 一個程式可以包含多個 BEGIN 和 END 塊。BEGIN 塊按照它們出現的順序執行。END 塊按照它們出現的相反順序執行。