@@ -122,37 +122,8 @@ func fieldsN(s string, n int) []string {
122
122
}
123
123
124
124
func init () {
125
- StringType .Dict ["split" ] = MustNewMethod ("split" , func (self Object , args Tuple ) (Object , error ) {
126
- selfStr := self .(String )
127
- var value Object = None
128
- zeroRemove := true
129
- if len (args ) > 0 {
130
- if _ , ok := args [0 ].(NoneType ); ! ok {
131
- value = args [0 ]
132
- zeroRemove = false
133
- }
134
- }
135
- var maxSplit int = - 2
136
- if len (args ) > 1 {
137
- if m , ok := args [1 ].(Int ); ok {
138
- maxSplit = int (m )
139
- }
140
- }
141
- var valArray []string
142
- if valStr , ok := value .(String ); ok {
143
- valArray = strings .SplitN (string (selfStr ), string (valStr ), maxSplit + 1 )
144
- } else if _ , ok := value .(NoneType ); ok {
145
- valArray = fieldsN (string (selfStr ), maxSplit )
146
- } else {
147
- return nil , ExceptionNewf (TypeError , "Can't convert '%s' object to str implicitly" , value .Type ())
148
- }
149
- o := List {}
150
- for _ , j := range valArray {
151
- if len (j ) > 0 || ! zeroRemove {
152
- o .Items = append (o .Items , String (j ))
153
- }
154
- }
155
- return & o , nil
125
+ StringType .Dict ["split" ] = MustNewMethod ("split" , func (self Object , args Tuple , kwargs StringDict ) (Object , error ) {
126
+ return self .(String ).Split (args , kwargs )
156
127
}, 0 , "split(sub) -> split string with sub." )
157
128
158
129
StringType .Dict ["startswith" ] = MustNewMethod ("startswith" , func (self Object , args Tuple ) (Object , error ) {
@@ -597,13 +568,46 @@ func (s String) M__contains__(item Object) (Object, error) {
597
568
return NewBool (strings .Contains (string (s ), string (needle ))), nil
598
569
}
599
570
571
+ func (s String ) Split (args Tuple , kwargs StringDict ) (Object , error ) {
572
+ var (
573
+ pyval Object = None
574
+ pymax Object = Int (- 2 )
575
+ pyfmt = "|Oi:split"
576
+ kwlst = []string {"sep" , "maxsplit" }
577
+ )
578
+ err := ParseTupleAndKeywords (args , kwargs , pyfmt , kwlst , & pyval , & pymax )
579
+ if err != nil {
580
+ return nil , err
581
+ }
582
+
583
+ var (
584
+ max = pymax .(Int )
585
+ vs []string
586
+ )
587
+ switch v := pyval .(type ) {
588
+ case String :
589
+ vs = strings .SplitN (string (s ), string (v ), int (max )+ 1 )
590
+ case NoneType :
591
+ vs = fieldsN (string (s ), int (max ))
592
+ default :
593
+ return nil , ExceptionNewf (TypeError , "Can't convert '%s' object to str implicitly" , pyval .Type ())
594
+ }
595
+ o := List {}
596
+ for _ , j := range vs {
597
+ o .Items = append (o .Items , String (j ))
598
+ }
599
+ return & o , nil
600
+ }
601
+
600
602
// Check stringerface is satisfied
601
- var _ richComparison = String ("" )
602
- var _ sequenceArithmetic = String ("" )
603
- var _ I__mod__ = String ("" )
604
- var _ I__rmod__ = String ("" )
605
- var _ I__imod__ = String ("" )
606
- var _ I__len__ = String ("" )
607
- var _ I__bool__ = String ("" )
608
- var _ I__getitem__ = String ("" )
609
- var _ I__contains__ = String ("" )
603
+ var (
604
+ _ richComparison = String ("" )
605
+ _ sequenceArithmetic = String ("" )
606
+ _ I__mod__ = String ("" )
607
+ _ I__rmod__ = String ("" )
608
+ _ I__imod__ = String ("" )
609
+ _ I__len__ = String ("" )
610
+ _ I__bool__ = String ("" )
611
+ _ I__getitem__ = String ("" )
612
+ _ I__contains__ = String ("" )
613
+ )
0 commit comments