Skip to content

Commit 43d93e3

Browse files
committed
Add __repr__, __str__ of range
__repr__ print start, stop of range if step is not one, step is also printed Fixes #86
1 parent 261242c commit 43d93e3

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed

py/range.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
package py
88

9+
import "bytes"
10+
911
// A python Range object
1012
// FIXME one day support BigInts too!
1113
type Range struct {
@@ -104,6 +106,42 @@ func (r *Range) M__iter__() (Object, error) {
104106
}, nil
105107
}
106108

109+
func (r *Range) M__str__() (Object, error) {
110+
return r.M__repr__()
111+
}
112+
113+
func (r *Range) repr() (Object, error) {
114+
var out bytes.Buffer
115+
out.WriteString("range(")
116+
start, err := ReprAsString(r.Start)
117+
if err != nil {
118+
return nil, err
119+
}
120+
stop, err := ReprAsString(r.Stop)
121+
if err != nil {
122+
return nil, err
123+
}
124+
out.WriteString(start)
125+
out.WriteString(", ")
126+
out.WriteString(stop)
127+
128+
if r.Step != 1 {
129+
step, err := ReprAsString(r.Step)
130+
if err != nil {
131+
return nil, err
132+
}
133+
out.WriteString(", ")
134+
out.WriteString(step)
135+
}
136+
out.WriteString(")")
137+
138+
return String(out.String()), nil
139+
}
140+
141+
func (r *Range) M__repr__() (Object, error) {
142+
return r.repr()
143+
}
144+
107145
func (r *Range) M__len__() (Object, error) {
108146
return r.Length, nil
109147
}

0 commit comments

Comments
 (0)