ABAP mesh表示式, JavaScript和Scala的 expression

i042416發表於2020-03-13

ABAP Mesh expression

ABAP mesh表示式, JavaScript和Scala的 expression

JavaScript

我在第10行呼叫了函式f,其中傳入的第二個和第三個引數都是一個逗號表示式。

函式f的實現,會檢查這兩個引數的型別,如果是函式,則執行函式呼叫,再列印其返回值,否則直接列印傳入的表示式的值。

ABAP mesh表示式, JavaScript和Scala的 expression

執行上面這段程式碼,列印輸出如下:

ABAP mesh表示式, JavaScript和Scala的 expression

我們可以看出,雖然傳入的第一個引數為true,導致函式f內部只會列印第二個引數y代表的表示式的值,5,但是第三個引數代表的表示式在函式f呼叫時,也進行了表示式求值,所以最後console也輸出了Big calculation2。

如果我們想實現所謂的“惰性求值”,有時候也稱”惰性計算“,那麼只需要將原本寫在表示式位置的邏輯用一個JavaScript函式包裹起來,如下:

ABAP mesh表示式, JavaScript和Scala的 expression

再次呼叫f,此時傳入的引數y和z的型別為函式,因此在f進行呼叫時,同之前傳入的表示式不同,這裡並不會即時呼叫y和z代表的函式。列印輸出:

ABAP mesh表示式, JavaScript和Scala的 expression

Scala

Scala 是一門多正規化(multi-paradigm)的程式語言,設計初衷是要整合物件導向程式設計和函數語言程式設計的各種特性。

Scala 執行在Java虛擬機器上,併相容現有的Java程式。

Scala 原始碼被編譯成Java位元組碼,所以它可以執行於JVM之上,並可以呼叫現有的Java類庫。

ABAP mesh表示式, JavaScript和Scala的 expression

下圖第5行和第12行我分別定義了兩個Scala函式exp_test1和exp_test2, 邏輯和之前的JavaScript函式f類似。

exp_test1接受的第二個和第三個引數型別為exp1 :=> Unit,意思是需要傳入一個表示式,這個表示式的返回型別是Unit。

exp_test2接收的第二個和第三個引數型別為exp1() :=> Unit,意思是需要傳入一個函式,這個函式沒有任何輸入引數,函式的返回型別是Unit。

ABAP mesh表示式, JavaScript和Scala的 expression

第19行到第25行是對這兩個函式的各種測試,列印輸出:

ABAP mesh表示式, JavaScript和Scala的 expression

可以看到,即使傳入兩個函式exp_test1和exp_test2的第二個和第三個引數都是表示式,Scala也能做到對錶達式的惰性求值:

第19行和第20行的函式呼叫,第三個引數位置的表示式和函式都沒有即時求值,而是惰性求值。

第22行和第23行的函式呼叫,第二個引數位置的表示式和函式都沒有即時求值,而是惰性求值。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2680017/,如需轉載,請註明出處,否則將追究法律責任。

相關文章