[Ironpython-users] Problem with the "in" operator for
m.schaber at codesys.com
Tue Jul 7 16:18:30 CEST 2015
As far as I can see, the "in" operator should return true if any object in the enumerable is "equal" to the object given as reference:
IronPython 2.7.5 (126.96.36.199) on .NET 4.0.30319.34209 (32-bit)
Type "help", "copyright", "credits" or "license" for more information.
>>> t = (1,2)
>>> o = (t, 3, "4", 1024)
>>> 1024 in o
>>> "4" in o
>>> (1,2) in o
>>> t in o
>>> a = 2**100
>>> b = 2**100
>>> a in (b,)
>>> a is b
>>> import System
>>> g = System.Guid.NewGuid()
>>> h = System.Guid(g.ToString())
>>> g == h
>>> g is h
>>> g in (h,)
However, it looks like this is not working correctly with IDynamicMetaObjectProvider implementations.
I attached an example which is a stripped down case of some much more complex real world code. In that case, the assertion in the last line fails although a equals b.
# a and b are provided by the host written in C#
assert a == b, 'a equals b'
assert not a is b, 'a is not b'
assert a in (a,), 'a is in (a,)'
assert a in (b,), 'a is in (b,)' # this one fails...
As far as I can see via breakpoints, the Equals methods of the objects are never actually called, except on the first assertion with the == operator.
 In the real world code, arbitrary plugins may provide extensions to extendable objects from other plugins, to dynamically (at run-time) add methods and properties to those instances.
CODESYS(r) a trademark of 3S-Smart Software Solutions GmbH
Inspiring Automation Solutions
3S-Smart Software Solutions GmbH
Dipl.-Inf. Markus Schaber | Product Development Core Technology
Memminger Str. 151 | 87439 Kempten | Germany
Tel. +49-831-54031-979 | Fax +49-831-54031-50
E-Mail: m.schaber at codesys.com | Web: http://www.codesys.com | CODESYS store: http://store.codesys.com
CODESYS forum: http://forum.codesys.com
Managing Directors: Dipl.Inf. Dieter Hess, Dipl.Inf. Manfred Werner | Trade register: Kempten HRB 6186 | Tax ID No.: DE 167014915
This e-mail may contain confidential and/or privileged information. If you are not the intended recipient (or have received
this e-mail in error) please notify the sender immediately and destroy this e-mail. Any unauthorised copying, disclosure
or distribution of the material in this e-mail is strictly forbidden.
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
More information about the Ironpython-users