What have you found for these years?

2009-03-20

scala implicit

我目前想不起來還有沒有看過更瘋狂的程式語言功能,
所以或許 scala implicit 將會奪冠吧。

A Tour of Scala: Views
http://www.scala-lang.org/node/130

這真的有點誇張,當你說 ooo.xxx 時,別懷疑,
這個 xxx 可能來自任何地方,藉由 implicit.
有點像是在 ruby 裡定義 Object#method_missing,
在裡面做一個 map[message].new.send(message) 這樣吧。

意思就是,如果這個 method 找不到,他就會去所有被宣告為
implicit 的 method 裡尋找 return type 有回應這個 method,
然後把整個 object 轉成該那新的 object, 再呼叫那個 method.

像是內建的 RichOoo 就是這些東西。
原本的 123, "abc" 這些東西的 method 有限,
但是 RichOoo 就有一大堆 method 了。

有點像是 RichOoo 本身就是 Ooo 的一部份,
但是需要用到時才會 construct 起來吧...

這樣想像的話會覺得好一些。不然感覺就像是 implicit 一多的話,
到底哪個 method call 來自哪個 class 都不會有人知道。
static typing 瞬間變成 dynamic typing...

希望是我搞錯什麼,不然 implicit 用下去真的會暴走。

9 retries:

Plumm said...

Scala 有個 Web 架構叫 Lift 的,godfat 有空可以看看 :QQ

godfat 真常 said...

這好像是最大的 3rd party lib?

godfat 真常 said...

我看到一大堆 xml
zzz

波卡 said...

挖舊文來回... XD

剛剛看了一個presentation, 裡面提到implicit conversion一個很大的功能是可以用來在既有的class裡頭灌進新的method

這樣想是很合理啦,不過總感覺可以搞出非常多詭異的技巧...XD

godfat 真常 said...

XD

是啊,我想他的目的之一就是,
在 java 裡,你對已經 compile 成 class 的東西沒輒,
如果他有問題,沒有 source, 仍然只能遷就。
但在 scala 裡,就能靠 implicit 繞過去

我覺得這真的很可怕,很強大絕對沒有錯,
但這濫用起來,整個 call stack 應該會很恐怖,
程式流程會非常難以掌握。

不過從另一個角度來看,在 haskell 中,
你也完全不會知道 call stack 長什麼樣子,
或許,用這個角度去看,implicit 應該是很有用吧?

波卡 said...

「反正濫用起來會爆炸的語言特性也不差這一個」

我突然想到這句...XD

godfat 真常 said...

確實是這樣... XD
雖然太多時,就會讓人覺得難以掌握

誰說的呀? XDDD

波卡 said...

應該是我自己說的...XDDDDDD

godfat 真常 said...

我笑了 XD

(筆記,波卡語錄)

Post a Comment

All texts are licensed under CC Attribution 3.0