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')".
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.