My Programming Language (Delphi) Can Do This
For your convinience here is the relevant snippet from Joel's blog:
Delphi, contrary to JavaScript, is a strongly-typed language. This is the reason you need to define an anonymous method signature. I think it is a good thing.

Here is the output from a simple console application:

I have my private theory about Joel's lastname which is "Spolsky". I'm Polish myself and I guees there is some Polish connection here. "Spolsky" sounds like "z Polski" in Polish language, which is "from Poland" but just made more English-looking like.
And make sure you visit "Stack Overflow" for ultimate programmers' FAQ system.
Creating an account on Stack Overflow is tricky. I had to create a blog account on blogspot server to obtain an openID.
Delphi 2009 and C++Builder 2009 introduce full Unicode support. Here is "The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)".


Comments
-
Indeed, I think Pawel somewhat missed the point of Joel's article.
When Joel asks "Can your language do this?" he wasn't asking "Does your language have anonymous methods?". He was referring to using functions as things that can be passed around, e.g. to be invoked later/elsewhere.
Some languages cannot do this and *need* anonymous methods.
Delphi didn't have anonymous methods before Delphi 2009, but has always had "first class functions". Users of Delphi 1.0 would have answered "Yes" to Joel's question.
Anonymous methods do of course add more, in the form of more flexible and, some would say, powerful closures, but these are potentially also far more confusing (for the poor old human reader, not the compiler). -
For completeness:
type
TCookingProc = procedure(aIngredient: String);
procedure Potted(aIngredient: String);
begin
WriteLn('Pot ' + aIngredient);
end;
procedure Boomed(aIngredient: String);
begin
WriteLn('Boom ' + aIngredient);
end;
procedure Cook(aFirst, aSecond: String; aProc: TCookingProc);
begin
WriteLn('Get the ' + aFirst);
aProc(aFirst);
aProc(aSecond);
end;
procedure DoCooking;
begin
Cook('lobster', 'water', Potted);
Cook('chicken', 'coconut', Boomed);
end;
(not tested - not even compiled. These comment editors don't make very good IDE's - lol) -
Michael Madsen Tuesday, 23 September 2008
Actually, Joel does mention that he wants to be able to declare the function in-line (there's a comment about function pointers in C, where he mentions the whole "having to declare the function elsewhere" as being a bit of a burden) - so he *does* actually ask for anonymous methods.
-
Please login first in order for you to submit comments
- Page :
- 1
Apparently you can write it as
procedure Cook(s1, s2: string; p: TProc);
No declaration of the anonymous method is needed.