<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=us-ascii">
<META content="MSHTML 6.00.2900.2722" name=GENERATOR>
<STYLE>@page Section1 {size: 8.5in 11.0in; margin: 1.0in 1.25in 1.0in 1.25in; }
P.MsoNormal {
        FONT-SIZE: 12pt; MARGIN: 0in 0in 0pt; FONT-FAMILY: "Times New Roman"
}
LI.MsoNormal {
        FONT-SIZE: 12pt; MARGIN: 0in 0in 0pt; FONT-FAMILY: "Times New Roman"
}
DIV.MsoNormal {
        FONT-SIZE: 12pt; MARGIN: 0in 0in 0pt; FONT-FAMILY: "Times New Roman"
}
A:link {
        COLOR: blue; TEXT-DECORATION: underline
}
SPAN.MsoHyperlink {
        COLOR: blue; TEXT-DECORATION: underline
}
A:visited {
        COLOR: purple; TEXT-DECORATION: underline
}
SPAN.MsoHyperlinkFollowed {
        COLOR: purple; TEXT-DECORATION: underline
}
SPAN.EmailStijl17 {
        COLOR: windowtext; FONT-FAMILY: Arial
}
DIV.Section1 {
        page: Section1
}
</STYLE>
</HEAD>
<BODY lang=EN-US vLink=purple link=blue>
<DIV dir=ltr align=left><SPAN class=252055902-07092005><FONT face=Verdana
size=2>Thanks for he repro and bug report, Jacques, the bug you see is caused by
missing implementation of closures in IronPython. The closure implementation is
on our to-do list.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=252055902-07092005><FONT face=Verdana
size=2></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=252055902-07092005><FONT face=Verdana
size=2>Thanks!</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=252055902-07092005><FONT face=Verdana
size=2>Martin</FONT></SPAN></DIV><BR>
<DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left>
<HR tabIndex=-1>
<FONT face=Tahoma size=2><B>From:</B>
users-ironpython.com-bounces@lists.ironpython.com
[mailto:users-ironpython.com-bounces@lists.ironpython.com] <B>On Behalf Of
</B>J. de Hooge<BR><B>Sent:</B> Friday, September 02, 2005 7:18 AM<BR><B>To:</B>
users-ironpython.com@lists.ironpython.com<BR><B>Subject:</B> [IronPython] self
not known in lambda function<BR></FONT><BR></DIV>
<DIV></DIV>
<DIV class=Section1>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"># Hi,</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">#</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"># Might this be a small bug
in IronPython? 'self' is not known inside the definition of a lambda
function</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"># I tried to insulate the
problem in a small (admittedly pointless) program, not to bother you with bulky
app. code</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"># I am using IronPython
0.9.1</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">#</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><<AN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"># Kind
regards</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"># Jacques de
Hooge info@geatec.com</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">#</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"># This example will print the
following:</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">#
======================================</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">#</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">#
workaround</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"># Traceback (most recent call
last):</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"># at
__main__.Initialize() in C:\activ_dell\prog\fun\src\funDebug.py:line
29</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"># at
__main__.lamda$1$f5()</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"># NameError: name 'self' not
defined</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">#</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">#
======================================</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"></SPAN></FONT> </P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">class
WorkAround:</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
def __init__ (self):</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
global this</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
this = self</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
self.setPrintWithoutParams (lambda: this.printWithParams
('workaround'))</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
def printWithParams (self, text):</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
print text</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
def setPrintWithoutParams (self, printWithoutParams):</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
self.printWithoutParams = printWithoutParams </SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"></SPAN></FONT> </P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">workAround = WorkAround
()</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">workAround.printWithoutParams
()</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"></SPAN></FONT> </P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"></SPAN></FONT> </P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"></SPAN></FONT> </P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">class
Problem:</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
def __init__ (self):</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
self.setPrintWithoutParams (lambda: self.printWithParams
('problem'))</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
def printWithParams (self, text):</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
print text</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
def setPrintWithoutParams (self, printWithoutParams):</SPAN></></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
self.printWithoutParams = printWithoutParams </SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"></SPAN></FONT> </P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">problem = Problem
()</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">problem.printWithoutParams
()</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=1><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"></SPAN></FONT> </P>
<P class=MsoNormal><FONT face=Arial size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"></SPAN></FONT> </P></DIV></FONT></BODY></HTML>