mirror of
https://github.com/golang/go
synced 2024-11-22 09:14:40 -07:00
Add some primitive type aliases to exp/iterable and define Iter on them.
R=rsc https://golang.org/cl/155065
This commit is contained in:
parent
37f71e8ad6
commit
affcfe5a75
@ -6,6 +6,7 @@ include $(GOROOT)/src/Make.$(GOARCH)
|
||||
|
||||
TARG=exp/iterable
|
||||
GOFILES=\
|
||||
array.go\
|
||||
iterable.go\
|
||||
|
||||
include $(GOROOT)/src/Make.pkg
|
||||
|
59
src/pkg/exp/iterable/array.go
Normal file
59
src/pkg/exp/iterable/array.go
Normal file
@ -0,0 +1,59 @@
|
||||
// Copyright 2009 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package iterable
|
||||
|
||||
// This file implements the Iterable interface on some primitive types.
|
||||
|
||||
type ByteArray []byte
|
||||
|
||||
func (a ByteArray) Iter() <-chan interface{} {
|
||||
ch := make(chan interface{});
|
||||
go func() {
|
||||
for _, e := range a {
|
||||
ch <- e
|
||||
}
|
||||
close(ch);
|
||||
}();
|
||||
return ch;
|
||||
}
|
||||
|
||||
type IntArray []int
|
||||
|
||||
func (a IntArray) Iter() <-chan interface{} {
|
||||
ch := make(chan interface{});
|
||||
go func() {
|
||||
for _, e := range a {
|
||||
ch <- e
|
||||
}
|
||||
close(ch);
|
||||
}();
|
||||
return ch;
|
||||
}
|
||||
|
||||
type FloatArray []float
|
||||
|
||||
func (a FloatArray) Iter() <-chan interface{} {
|
||||
ch := make(chan interface{});
|
||||
go func() {
|
||||
for _, e := range a {
|
||||
ch <- e
|
||||
}
|
||||
close(ch);
|
||||
}();
|
||||
return ch;
|
||||
}
|
||||
|
||||
type StringArray []string
|
||||
|
||||
func (a StringArray) Iter() <-chan interface{} {
|
||||
ch := make(chan interface{});
|
||||
go func() {
|
||||
for _, e := range a {
|
||||
ch <- e
|
||||
}
|
||||
close(ch);
|
||||
}();
|
||||
return ch;
|
||||
}
|
@ -8,17 +8,24 @@ import (
|
||||
"testing";
|
||||
)
|
||||
|
||||
type IntArray []int
|
||||
|
||||
func (arr IntArray) Iter() <-chan interface{} {
|
||||
ch := make(chan interface{});
|
||||
go func() {
|
||||
for _, x := range arr {
|
||||
ch <- x
|
||||
}
|
||||
close(ch);
|
||||
}();
|
||||
return ch;
|
||||
func TestArrayTypes(t *testing.T) {
|
||||
// Test that conversion works correctly.
|
||||
bytes := ByteArray([]byte{1, 2, 3});
|
||||
if x := Data(bytes)[1].(byte); x != 2 {
|
||||
t.Error("Data(bytes)[1].(byte) = %v, want 2", x)
|
||||
}
|
||||
ints := IntArray([]int{1, 2, 3});
|
||||
if x := Data(ints)[2].(int); x != 3 {
|
||||
t.Error("Data(ints)[2].(int) = %v, want 3", x)
|
||||
}
|
||||
floats := FloatArray([]float{1, 2, 3});
|
||||
if x := Data(floats)[0].(float); x != 1 {
|
||||
t.Error("Data(floats)[0].(float) = %v, want 1", x)
|
||||
}
|
||||
strings := StringArray([]string{"a", "b", "c"});
|
||||
if x := Data(strings)[1].(string); x != "b" {
|
||||
t.Error(`Data(strings)[1].(string) = %q, want "b"`, x)
|
||||
}
|
||||
}
|
||||
|
||||
var oneToFive = IntArray{1, 2, 3, 4, 5}
|
||||
|
Loading…
Reference in New Issue
Block a user