程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java根本教程之synchronized症結字 java多線程教程

java根本教程之synchronized症結字 java多線程教程

編輯:關於JAVA

java根本教程之synchronized症結字 java多線程教程。本站提示廣大學習愛好者:(java根本教程之synchronized症結字 java多線程教程)文章只能為提供參考,不一定能成為您想要的結果。以下是java根本教程之synchronized症結字 java多線程教程正文


Ruby中的辦法是一個著名稱的代碼塊,是與一個或多個對象聯系關系的參數化的代碼。挪用時須給出辦法名,吸收者(地點對象),參數值,且最初一個表達式的值做為前往值。與Ruby辦法類似的是代碼塊,它沒著名字,且挪用時只經由過程迭代器或被直接挪用。
 
(一)辦法
(1)界說辦法

界說辦法就是

def 辦法名(參數列表)
辦法體
end

最初一個表達式做為前往值前往,假如有值,則前往;無值則前往nil。可以省略return。
在類中界說的辦法為實例辦法,實例辦法可以在類的實例對象上應用。假如是在一個特定的對象上界說辦法,那末此辦法就是一個單鍵辦法,只能在這個對象上應用。


class Test
  def instance_method_test(v)
    puts "#{v}: instance method"
  end 
end
 
t1=Test.new
t2=Test.new
t1.instance_method_test("t1")
t2.instance_method_test("t2")
 
def t1.singleton_method_test(v)
  puts "#{v}:singleton method"
end
 
t1.singleton_method_test("t1")
#t2.singleton_method_test("t2")

在ruby中,辦法普通小寫字母開首,假如跨越一個單詞,則由下劃線離隔(看習氣)。成心思的是辦法名可以以等號、問號、歎號開頭,且有分歧的意義:以等號(=)開頭表現這是一個賦值辦法(寫屬性);以問號(?)開頭表現一個斷言辦法,可以答復挪用者提出成績的值,例如斷定年夜小;歎號(!)開頭表現是一個可變辦法,能夠會影響到對象的狀況,要當心應用。這三個符號很成心思,但它們不是必需的。

(2)撤消辦法

經由過程undef 辦法名 可以撤消辦法。關於被繼續的辦法,undef可以撤消子類中的繼續來的辦法,但不會撤消父類中的此辦法。

(3)辦法參數

在參數中添加等號和值便可認為這一個參數設置默許值。假如參數有默許值,那末在挪用辦法時,可認為這個參數指定值或不指定值。

def createRole(name,level=1)
  puts "role name is#{:name} level is #{level}"
end
 
createRole("way")
createRole("clound",5)

經由過程在參數前邊加星號(*),可認為辦法指定為可變參數個數(數組參數),且指定的個數最多為一個。

def add_Person(*users)
  puts users
end
add_Person("a1","a2")
add_Person("a1","a2","a3")

假如要把數組傳遞給辦法,要在數組前加星號(*)。

(二)代碼塊
辦法挪用後可以緊跟一個代碼塊,聯系關系代碼塊的辦法可以經由過程yield來挪用。

def showMessage(i)
  yield i*2
  print i
end
 
showMessage(5){|x|print "#{x}"}

代碼塊經由過程yield挪用,也能夠做為辦法參數傳遞,但條件是這個參數前須要添加&做為前綴且為最初一個參數。而此時它以一個proc對象傳遞,挪用時不克不及經由過程yield挪用,而是經由過程proc的call辦法挪用。別的,假如以顯示方法,即傳遞proc對象給辦法,那辦法界說的參數就不加&前綴了。經由過程&前綴,代碼塊可以與任何辦法挪用聯系關系起來,即便此辦法沒有yield語句。任何辦法挪用都可以用&參數作為最初一個參數。一切支撐to_proc的辦法都能用&。

#傳遞代碼塊,代碼塊參數須為最初一個,且添加&前綴;且挪用時用proc的call辦法
def fun_block(i,&b)
  b.call(i*2)
end
fun_block(2){|x|puts x}
 
#顯示傳遞proc對象。那末辦法中proc對象部門的參數不加&前綴
def fun_proc(i,b)
  b.call(i*2)
end
p=Proc.new{|x|puts x}
fun_proc(2,p)
 
c=[1,2,3,4,5,6]
b=c.select{|x|x%2==0}
p1=Proc.new{|x|x%2==0}
d=c.select(&p1)
puts d

代碼塊是Ruby的一種句法構造,不是對象,但可以創立對象來表現一個代碼塊。依據對象的創立方法,分為proc或lambda。proc行動與代碼塊類似;lambda行動與辦法類似,但它們都是Proc類的實例。
 
經由過程Proc.new創立一個proc,在1.9版本中,與proc辦法為同義詞;經由過程lambda辦法,創立一個lambda。lambda辦法不帶參數,挪用時段聯系關系一個代碼塊。
 
在ruby 1.9中,支撐一種新的句法。將lambda換為->;將參數放到花括號外邊,小括號裡邊;花括號中只保存表達式。(可以與.net3.*中的lambda比擬:()=>{})

#1.8k中
d1=lambda{|x|x+1}
puts d1.call(5)
#1.9中,將lambda換為->;參數放到花括號外邊,小括號裡邊;花括號中只保存表達式
#與.net3.*中的lambda表達式很像()=>{}
d2=->(x){x+1}
d2.call(5)

這類新句法,使代碼簡練,並使代碼段與ruby辦法的同一,例如:設置參數默許值。
(三)閉包

ruby中的proc和lambda都是閉包(closure)。閉包表現一個對象既是一個可挪用的函數,同時也是綁定在這個函數上的一個變量。從外面上說明閉包就是:辦法A內的辦法B挪用辦法A的變量,並前往成果。辦法B就是閉包。它的感化:一是B辦法的變量可以在辦法外應用;二是A辦法中的變量可以平安應用;三是對B辦法中的值停止緩存。
(關於閉包,可以檢查相干文檔,我這裡只是深刻的熟悉。)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved