Hi,

> On Oct 16, 2016, at 10:41 AM, CodeDmitry <dimamakh...@gmail.com> wrote:
> 
> I was actually curious about this in Ruby as well, since Ruby also doesn't
> have the Smalltalk message syntax.
> 
> I figure that the magic behind it is that Smalltalk takes strings like "dict
> at: 'foo' put: 'bar'" and evaluates them into a JavaScript equivalent of
> "dict['at:put:']('foo', 'bar')”.

There is no magic. This is how the syntax is. Instead of parentheses that 
accumulate all parameters in a single place like:
        x.atput(a,b);

we can insert the argument inside the message name, like:
        x at: a put: b.

It’s not magic, is just different. That’s all. Except that one makes it 
possible to write code that resembles natural language.

Doru



> Basically, my proof of concept(I cheated with regex to cut time):
> 
> 'use strict';
> 
> var Dictionary = function Dictionary() {
>    this.dict = {};
> };
> Dictionary.prototype['at:put:'] = function(index, value) {
>    this.dict[index] = value;
> };
> Object.defineProperty(Dictionary, 'new', {
>    get: function () {
>        return new this;
>    }
> });
> 
> function st_eval(str) {
>    var x = str.match(/(dict)\s+(at):\s+'(foo)'\s+(put):\s+'(bar)'/);
>    var target = x[1];
>    var callName = x[2] + ':' + x[4] + ':';
>    var argv = [x[3], x[5]];
>    var realTarget = eval(target);
>    realTarget[callName].apply(realTarget, argv);
> }
> 
> var dict = Dictionary.new;
> console.log(dict);
> //dict['at:put:']('foo', 'bar');
> console.log(dict);
> st_eval("dict at: 'foo' put: 'bar'");
> console.log(dict);
> 
> 
> 
> 
> 
> --
> View this message in context: 
> http://forum.world.st/How-do-Smalltalk-disambiguate-messages-tp4918946p4918957.html
> Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.
> 

--
www.tudorgirba.com
www.feenk.com

“The smaller and more pervasive the hardware becomes, the more physical the 
software gets."


Reply via email to