Scala 使用Curry實現AOP

2021-08-25 15:58:36 字數 661 閱讀 2008

業餘時間學了學scala,至今有3個多月了...這兩天看到群(54813143)裡有同學討論aop,於是就想出了如下實現;

//trait裡沒有任何抽象的值或方法

trait aop

def add(t:function1[string,any])= targets=t::targets //收集所有被攔截的方法(函式物件)

def invokeall()=

}class write extends aop

def writetwo(x:string,y:string,z:string)(placeholder:string)=

}val w=new write()

w.invoke(w.writeone("hello"," world")_) //攔截的方式,使用了偏應用函式

w.add(w.writeone("hello"," world")_) //收集

w.add(w.writetwo("hello"," world"," more")_) //再收集

w.invokeall //統一攔截

這裡只是給喜歡scala的同學乙個思路,期望在此思路上進行擴充套件。

是不是很優雅? 還在等什麼,快快加入到scala的學習隊伍中來吧。

Scala函式式程式設計 Curry柯里化

函式式程式設計的乙個思想 只傳遞給函式一部分引數來呼叫函式,然後返回乙個函式去處理剩下的引數。簡單說curry就是對高階函式 就是一種對過程的抽象 參考map它就是乙個抽象的過程 的降階處理。比如 function arg1,arg2 變成function arg1 arg2 function ar...

Scala 27 函式柯里化(curry)

函式程式設計中,接受多個引數的函式都可以轉化為接受單個引數的函式,這個轉化過程就叫柯里化。柯里化就是證明了函式只需要乙個引數而已。常規 def mul x int,y int x y println mul 10 10 閉包 def mulcurry x int y int x y println ...

scala的使用trait實現模板模式

使用trait實現模板模式 要實現以下需求 實現乙個輸出日誌的功能 目前要求輸出到控制台 將來可能會輸出到檔案 輸出到redis 或者更多的需求 如何實現將來不修改之前的 來擴充套件現有功能呢?定義 在乙個特質中,具體方法依賴於抽象方法,而抽象方法可以放到繼承trait的子類中實現,這種設計方式也稱...