Allen Wirfs-Brock wrote:
I was hypothesizing that Brendan's semantics would seldom be the programer's intent for person?.getName() . If an exception was acceptable, why wouldn't you just say:

Because it's rare to have a maybe-method called on a maybe-object, based on CoffeeScript experience and design. Please don't personalize this -- I wrote the strawman to capture what CoffeeScript has user-tested. Any bugs are mine, but they're also not (necessarily) intended.

Clearly I did not push the indefinite-null/undefined-soak semantics. That's in CoffeeScript. However, it does not suppress throwing on a call of a non-callable:

$ cat /tmp/y.coffee
person = {}
person?.getName()

$ ./bin/coffee -p /tmp/y.coffee
(function() {
  var person;

  person = {};

  if (person != null) {
    person.getName();
  }

}).call(this);

$ ./bin/coffee /tmp/y.coffee
TypeError: Object #<Object> has no method 'getName'
    at Object.<anonymous> (/private/tmp/y.coffee:7:12)
    at Object.<anonymous> (/private/tmp/y.coffee:10:4)
    at Module._compile (module.js:432:26)
at Object.run (/Users/brendaneich/Hacking/coffee-script/lib/coffee-script/coffee-script.js:79:25) at /Users/brendaneich/Hacking/coffee-script/lib/coffee-script/command.js:175:29 at /Users/brendaneich/Hacking/coffee-script/lib/coffee-script/command.js:150:18
    at [object Object].<anonymous> (fs.js:114:5)
    at [object Object].emit (events.js:64:17)
    at afterRead (fs.js:1081:12)
    at Object.wrapper [as oncomplete] (fs.js:252:17)

Let's look at what CoffeeScript requires to avoid this exception:

$ cat /tmp/z.coffee
person = {}
person?.getName?()

$ ./bin/coffee -p /tmp/z.coffee
(function() {
  var person;

  person = {};

  if (person != null) {
    if (typeof person.getName === "function") {
      person.getName();
    }
  }

}).call(this);

$ ./bin/coffee /tmp/z.coffee && echo "no throw"
no throw

Again, I do not see the point in gratuitously differing from CoffeeScript without reason. One might argue that since we cannot use ?( as CS does, we should make ?. soak up call TypeErrors. Could be, but I didn't propose anything for call yet and this discussion seems worth beating into the ground a bit more before I do :-).

/be
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to