teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

結論

2019/05/07 08:34

投稿

nobonobo
nobonobo

スコア3367

answer CHANGED
@@ -33,4 +33,6 @@
33
33
  s = append(s, d[0], d[1], d[2])
34
34
  fmt.Println(s)
35
35
  ```
36
- `d...`は「dの各要素を展開して引数に渡す」という意味なのです。
36
+ `d...`は「dの各要素を展開して引数に渡す」という意味なのです。
37
+
38
+ **結論としては「planは`[][]string`型である必要があります」です。**

3

fix

2019/05/07 08:34

投稿

nobonobo
nobonobo

スコア3367

answer CHANGED
@@ -13,7 +13,7 @@
13
13
  ただし、別途`...`による可変長引数展開という仕様があるので一緒に使うと混乱しやすいですね。
14
14
 
15
15
  以下の記述をする場合、基本のルールと違い、sとdの型は同じ型である必要があります。
16
- ```
16
+ ```go
17
17
  s = append(s, d...)
18
18
  ```
19
19
 
@@ -27,9 +27,10 @@
27
27
  この場合、コンパイルできて出力は`[a b c d e f]`となります。
28
28
 
29
29
  上記のコードの挙動は下記のコードと同じです。
30
- ```
30
+ ```go
31
31
  s := []string{"a", "b", "c"}
32
32
  d := []string{"d", "e", "f"}
33
33
  s = append(s, d[0], d[1], d[2])
34
+ fmt.Println(s)
34
35
  ```
35
36
  `d...`は「dの各要素を展開して引数に渡す」という意味なのです。

2

改善

2019/05/07 08:31

投稿

nobonobo
nobonobo

スコア3367

answer CHANGED
@@ -1,2 +1,35 @@
1
1
  多重スライスにappendできるのはスライスだけです。エラーメッセージが示す通り、ただの文字列はappendできません。
2
- まず、文字列スライスを作ってみてそれをappendしてみましょう。
2
+ まず、文字列スライスを作ってみてそれをappendしてみましょう。
3
+
4
+ `あるスライス型`の要素は`あるスライス型`の先頭の`[]`を取り除いた型です。
5
+
6
+ - `[][]string型の値`の要素になれるのは`[]string型の値`だけです。
7
+ - `[]string型の値`の要素になれるのは`string型の値`だけです。
8
+
9
+ つまり`あるスライス型`にappendできるのはその要素だけです。
10
+
11
+ これが基本のルールです。
12
+
13
+ ただし、別途`...`による可変長引数展開という仕様があるので一緒に使うと混乱しやすいですね。
14
+
15
+ 以下の記述をする場合、基本のルールと違い、sとdの型は同じ型である必要があります。
16
+ ```
17
+ s = append(s, d...)
18
+ ```
19
+
20
+ つまり、
21
+ ```
22
+ s := []string{"a", "b", "c"}
23
+ d := []string{"d", "e", "f"}
24
+ s = append(s, d...)
25
+ fmt.Println(s)
26
+ ```
27
+ この場合、コンパイルできて出力は`[a b c d e f]`となります。
28
+
29
+ 上記のコードの挙動は下記のコードと同じです。
30
+ ```
31
+ s := []string{"a", "b", "c"}
32
+ d := []string{"d", "e", "f"}
33
+ s = append(s, d[0], d[1], d[2])
34
+ ```
35
+ `d...`は「dの各要素を展開して引数に渡す」という意味なのです。

1

追記

2019/05/07 08:30

投稿

nobonobo
nobonobo

スコア3367

answer CHANGED
@@ -1,1 +1,2 @@
1
- 多重スライスにappendできるのはスライスだけです。エラーメッセージが示す通り、ただの文字列はappendできません。
1
+ 多重スライスにappendできるのはスライスだけです。エラーメッセージが示す通り、ただの文字列はappendできません。
2
+ まず、文字列スライスを作ってみてそれをappendしてみましょう。