Skip to content

Instantly share code, notes, and snippets.

@dckc
Created November 11, 2011 05:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dckc/1357307 to your computer and use it in GitHub Desktop.
Save dckc/1357307 to your computer and use it in GitHub Desktop.
Exploring Dart via the ERights money example
// compare with https://bitbucket.org/DanC/coffee-craft/src/682d06f02e99/money.coffee
// ugh... no nested classes? gotta pass thunks around?
class SealedBox {
final capture;
SealedBox(this.capture);
shareContent() { capture(); }
}
class Sealer {
final save;
Sealer(this.save);
seal(it) => new SealedBox(() {save(it);});
}
class Unsealer {
final flush;
final bad;
final fill;
final extract;
Unsealer(this.flush, this.bad, this.fill, this.extract);
unseal(box) {
flush();
box.shareContent();
if (bad())
throw new IllegalArgumentException('invalid box');
fill();
flush();
return extract();
}
}
makeBrandPair(hint) {
final noObject = new Object();
var shared = noObject;
var content = null;
final sealer = new Sealer((it) {shared = it;});
final unsealer = new Unsealer(
() { shared = noObject;},
() => shared == noObject,
() { content = shared; },
() => content );
return [sealer, unsealer];
}
main() {
// ugh... ;s everywhere
print('eyeball-test makeBrandPair');
// no destructuring assignment?
final s_u = makeBrandPair('bob');
final s = s_u[0];
final u = s_u[1];
final x = s.seal('abc');
print(x);
print(u.unseal(x));
}
/*
# connect the dots between node.js's console
# and http://wiki.erights.org/wiki/TextWriter
out = {
print: (s) -> console.log(s)
}
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment