#20743: Parent.list() should return an immutable tuple
-------------------------------------+------------------------
Reporter: jsrn | Owner:
Type: defect | Status: new
Priority: major | Milestone: sage-7.3
Component: categories | Resolution:
Keywords: parent, immutable | Merged in:
Authors: | Reviewers:
Report Upstream: N/A | Work issues:
Branch: | Commit:
Dependencies: | Stopgaps:
-------------------------------------+------------------------
Comment (by nbruin):
Replying to [comment:10 kedlaya]:
> But it might be unavoidable: tuples must consist of immutable objects,
so it may not always be possible to return one.
That is not true:
{{{
sage: A=([1],[2])
sage: A[0].append(3)
sage: A
([1, 3], [2])
}}}
That said, I don't think `foo.tuple()` would be discoverable at all, so
think that's a very bad name for implementing this functionality.
I think it is essential that `foo.list()` continues to provide a way to
indexably access constituents of an object (although it would be
interesting to have data on how much code depends on that). If returning a
list for that is too dangerous, I'd be fine with a tuple instead.
If it has to be a list then that would be fine with me. If it's too
difficult to let people use `copy` when they need to, we may just have to
add an option. Something like:
{{{
sage: foo.list()
<returns a copied list>
sage: foo.list(tuple=true)
<returns the cached/stored tuple>
sage: foo.list(copy=false)
<returns the cached/stored list>
}}}
Concerning verbs/nouns: English is a pretty flexible language. You can
verb any noun in it, so without grammatical context you can't really tell
what it is anyway. If we want to remove the ambiguity, we should probably
rename the method to `foo.listify()`.
In fact, I always thought that desctructive method would be verbs (and
return None) and methods without side effects would be nouns, as in
`L.sort()` versus `L.sorted()` (except that python, having a decided
preference for routines with side effects, doesn't have the latter)
Note that a common design paradigm in python is "we are all consenting
adults here" (an argument I haven't seen brought up against using python
for pre-university schooling yet). From that perspective, returning a
mutable list (perhaps because it must be mutable internally) that
shouldn't be mutated isn't an absolute no-go.
--
Ticket URL: <http://trac.sagemath.org/ticket/20743#comment:12>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica,
and MATLAB
--
You received this message because you are subscribed to the Google Groups
"sage-trac" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sage-trac.
For more options, visit https://groups.google.com/d/optout.