Skip to content

Commit 0ff757f

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 0ff757f

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

py/range.go

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

77
package py
88

9+
import (
10+
"strings"
11+
)
12+
913
// A python Range object
1014
// FIXME one day support BigInts too!
1115
type Range struct {
@@ -104,6 +108,42 @@ func (r *Range) M__iter__() (Object, error) {
104108
}, nil
105109
}
106110

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

0 commit comments

Comments
 (0)