@@ -226,6 +226,9 @@ replaced.`)
226
226
return self .(String ).Lower ()
227
227
}, 0 , "lower() -> a copy of the string converted to lowercase" )
228
228
229
+ StringType .Dict ["join" ] = MustNewMethod ("join" , func (self Object , args Tuple ) (Object , error ) {
230
+ return self .(String ).Join (args )
231
+ }, 0 , "join(iterable) -> return a string which is the concatenation of the strings in iterable" )
229
232
}
230
233
231
234
// Type of this object
@@ -755,6 +758,30 @@ func (s String) Lower() (Object, error) {
755
758
return String (strings .ToLower (string (s ))), nil
756
759
}
757
760
761
+ func (s String ) Join (args Tuple ) (Object , error ) {
762
+ if len (args ) != 1 {
763
+ return nil , ExceptionNewf (TypeError , "join() takes exactly one argument (%d given)" , len (args ))
764
+ }
765
+ var parts []string
766
+ iterable , err := Iter (args [0 ])
767
+ if err != nil {
768
+ return nil , err
769
+ }
770
+ item , err := Next (iterable )
771
+ for err == nil {
772
+ str , ok := item .(String )
773
+ if ! ok {
774
+ return nil , ExceptionNewf (TypeError , "sequence item %d: expected str instance, %s found" , len (parts ), item .Type ().Name )
775
+ }
776
+ parts = append (parts , string (str ))
777
+ item , err = Next (iterable )
778
+ }
779
+ if err != StopIteration {
780
+ return nil , err
781
+ }
782
+ return String (strings .Join (parts , string (s ))), nil
783
+ }
784
+
758
785
// Check stringerface is satisfied
759
786
var (
760
787
_ richComparison = String ("" )
0 commit comments