Java笔记:Visitor Pattern与模式匹配与CPS变换(雾)

这是我接触Java的第二个星期(雾),大概是自己上手最快的语言了吧。 作为一个菜Haskeller,总想人肉将Haskell代码编译到Java上。 看了A little Java这本书,相比于Thinking in Java这些“传统”一点的书,觉得挺耳目一新的。 今天就把学到的东西记录一下——「利用Visitor Pattern模拟ML系语言的Pattern Matching」 当然,在OOP里面模拟Pattern Matching也是一件特别有成就感的事情,毕竟Pattern Matching这是一个特别好用的东西。 先看最简单的Maybe(写成Option)模式匹配的例子: data Option a = Some a | None getOrElse :: Option a -> a -> a getOrElse opt other = case opt of Some v -> v None -> other 然后再看看在Java里面如何表达。首先要定义等价的数据结构: abstract class Option<T> {} final class Some<T> extends Option<T> { private final T value; Some(T v) { value = v; } } final class None<T> extends Option<T> {} 可以将Java中抽象类表示一个Datatype,然后将继承这个抽象类的类作为这个Datatype的变体(variant)。然后如何模拟模式匹配呢?有请今天的主角:Visitor Pattern。用一个visitor来访问每个变体里的字段。...

October 13, 2018 · 脚趾头 · 转自知乎

原来我不会Java

Proving Programs Correct Using Plain Old Java Types什么鬼。。。表示orz,应该重新去看看TAPL ,然后看看ATAPL

June 9, 2017 · 圆角骑士魔理沙 · CC BY-SA 4.0