[IronPython] ValueError: cannot assign to value types

Count László de Almásy calmasy at gmail.com
Tue Aug 11 03:07:27 CEST 2009


i'd feek ok about any method that at least allowed me to work around
the current situaiton. a warning seems fine to me. even better, an
explicit way for us to enable the behavior without a warning.

On Mon, Aug 10, 2009 at 6:27 PM, Dino Viehland<dinov at microsoft.com> wrote:
> Just out of curiosity - how would you feel if we enabled the behavior
> but issued a warning when it occurred?  In v1.0 when we made this
> decision we had no warning support and it could serve as a mitigating
> factor in enabling it.  But it could also be too noisy.
>
> It's funny, I just got had to fix a bug in IronPython where they allow
> this but it doesn't really work.
>
> Given:
>
> List<SomeValueType> x;
> X[0].Bar = 42;
>
> fails to update the list.
>
>
>> -----Original Message-----
>> From: users-bounces at lists.ironpython.com [mailto:users-
>> bounces at lists.ironpython.com] On Behalf Of Count László de Almásy
>> Sent: Monday, August 10, 2009 5:20 PM
>> To: Discussion of IronPython
>> Subject: Re: [IronPython] ValueError: cannot assign to value types
>>
>> i dunno. i think this behavior needs to be re-thought for Ipy 2.6. i
>> understand the reasons behind the decision, but the bottom line is
>> that i'm unable to work with a perfectly valid, legal .NET assembly.
>> it's one thing to do this as the default behavior, but to not allow
>> the programmer to override it if that is his choice is not correct in
>> my opinion.
>>
>> On Fri, Aug 7, 2009 at 11:04 PM, Curt Hagenlocher<curt at hagenlocher.org>
>> wrote:
>> > __setattr__ it's not a *CLR*-level instance method of the type.
>> IronPython
>> > just makes it look like it is.
>> > One possibility is to simply create an entirely new Parcel from
>> scratch,
>> > assigning values as appropriate. For example, given the following C#
>> > classes:
>> >
>> > public struct Point {
>> >     public int x, y;
>> > }
>> > public class Line {
>> >     public Point to, from;
>> > }
>> >
>> > You can do this from Python:
>> >
>> > F:\tcwb\libs>ipy.exe
>> > IronPython 2.6 Beta 2 (2.6.0.20) on .NET 2.0.50727.4927
>> > Type "help", "copyright", "credits" or "license" for more information.
>> >>>> import clr
>> >>>> clr.AddReference('x')
>> >>>> import Point, Line
>> >>>> l = Line()
>> >>>> l.to.x
>> > 0
>> >>>> l.to.x = 1
>> > Traceback (most recent call last):
>> >   File "<stdin>", line 1, in <module>
>> > ValueError: cannot assign to value types
>> >>>> l.to = Point(x = 1, y = 2)
>> >>>> l.to.x
>> > 1
>> >>>>
>> >
>> > On Fri, Aug 7, 2009 at 8:40 PM, Count László de Almásy
>> <calmasy at gmail.com>
>> > wrote:
>> >>
>> >> i'm really stuck trying to change values for an object of type
>> >> 'Parcel', which comes from the openmetaverse library i'm using. how
>> >> this library is implemented i don't have control over, but the given
>> >> interface is to make local changes to these Parcel objects, then use
>> >> its Update() method to commit the changes. but it seems in
>> IronPython
>> >> i can't change these objects.
>> >>
>> >> >>> type(props)
>> >> <type 'Parcel'>
>> >>
>> >> >>> props.Name = "Yes"
>> >> Traceback (most recent call last):
>> >>  File "<stdin>", line 1, in <module>
>> >> ValueError: cannot assign to value types
>> >>
>> >> after hours of struggling, i found
>> >> http://ironpython.codeplex.com/Wiki/View.aspx?title=Value%20Types
>> >> which seems to explain why i'm being bit here. bit it also says
>> >> "updates are still possible via instance methods on the value type
>> >> itself." so isn't "__setattr__" an instance method? seems i'm not
>> able
>> >> to use that either:
>> >>
>> >> >>> props.__setattr__("Name", "Yes")
>> >> Traceback (most recent call last):
>> >>  File "<stdin>", line 1, in <module>
>> >> ValueError: Attempt to update field 'Name' on value type 'Parcel';
>> >> value type fields cannot be directly modified
>> >>
>> >> ok, so what are my options? how do i get around this? i *have* to be
>> >> able to update objects of this type somehow.
>> >>
>> >> i can create a new object of that type, but the constructor doesn't
>> >> allow me to pre-stock it with values ( since i guess it assumes i'll
>> >> be able to change them later), and then of course once it's created
>> i
>> >> can't change anything.
>> >>
>> >> --
>> >> Cheers, László
>> >> _______________________________________________
>> >> Users mailing list
>> >> Users at lists.ironpython.com
>> >> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>> >
>> >
>> > _______________________________________________
>> > Users mailing list
>> > Users at lists.ironpython.com
>> > http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>> >
>> >
>>
>>
>>
>> --
>> Cheers, László
>> _______________________________________________
>> Users mailing list
>> Users at lists.ironpython.com
>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>
> _______________________________________________
> Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>



-- 
Cheers, László



More information about the Ironpython-users mailing list