回答編集履歴

7

追記

2017/05/21 03:33

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -80,6 +80,10 @@
80
80
 
81
81
  20.times { methods.sample[] }
82
82
 
83
+ # メソッドオブジェクトを実行するには .call または .() または [] を使う
84
+
85
+ # すべて等価
86
+
83
87
  ```
84
88
 
85
89
 

6

説明追記

2017/05/21 03:33

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -1,3 +1,19 @@
1
+ > 配列の要素にメソッドを格納したのにもかかわらず、randメソッドが無視されて?
2
+
3
+
4
+
5
+ Rubyは**メソッド呼び出しの括弧を省略できる**という特性を持っています。これ,裏を返せば**メソッド名を書いただけで実行されちゃう**ってことです。なのでそもそも格納されているのはメソッドではなくメソッドの実行結果の返り値です。`print`の返り値は`nil`なのでそれが格納されていますね。
6
+
7
+
8
+
9
+ メソッドは「シンボル」あるいは「Methodオブジェクト」(シンボルから変換する)として保持します。
10
+
11
+
12
+
13
+ ---
14
+
15
+
16
+
1
17
  メソッド名をシンボルとして保持する例
2
18
 
3
19
 
@@ -34,7 +50,7 @@
34
50
 
35
51
 
36
52
 
37
- メソッドをオブジェクトとして保持する例
53
+ メソッドをMethodオブジェクトとして保持する例
38
54
 
39
55
 
40
56
 

5

説明修正

2017/05/21 03:32

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -58,7 +58,7 @@
58
58
 
59
59
  methods = [:greeting1, :greeting2].map &method(:method)
60
60
 
61
- # &method(:method) は {|x| method(x)} と等価
61
+ # &method(:method) は {|x| method x} と等価
62
62
 
63
63
 
64
64
 

4

説明

2017/05/21 03:25

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -58,6 +58,8 @@
58
58
 
59
59
  methods = [:greeting1, :greeting2].map &method(:method)
60
60
 
61
+ # &method(:method) は {|x| method(x)} と等価
62
+
61
63
 
62
64
 
63
65
  20.times { methods.sample[] }

3

パターン追加

2017/05/21 03:24

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -1,3 +1,7 @@
1
+ メソッド名をシンボルとして保持する例
2
+
3
+
4
+
1
5
  ```ruby
2
6
 
3
7
  def greeting1
@@ -23,3 +27,41 @@
23
27
  20.times { send method_names.sample }
24
28
 
25
29
  ```
30
+
31
+
32
+
33
+ ---
34
+
35
+
36
+
37
+ メソッドをオブジェクトとして保持する例
38
+
39
+
40
+
41
+ ```ruby
42
+
43
+ def greeting1
44
+
45
+ puts "おはよう!"
46
+
47
+ end
48
+
49
+
50
+
51
+ def greeting2
52
+
53
+ puts "今日はさわやかですね"
54
+
55
+ end
56
+
57
+
58
+
59
+ methods = [:greeting1, :greeting2].map &method(:method)
60
+
61
+
62
+
63
+ 20.times { methods.sample[] }
64
+
65
+ ```
66
+
67
+

2

括弧省略

2017/05/21 03:20

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -20,6 +20,6 @@
20
20
 
21
21
 
22
22
 
23
- 20.times { send(method_names.sample) }
23
+ 20.times { send method_names.sample }
24
24
 
25
25
  ```

1

20回表示

2017/05/21 03:15

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -20,6 +20,6 @@
20
20
 
21
21
 
22
22
 
23
- send(method_names.sample)
23
+ 20.times { send(method_names.sample) }
24
24
 
25
25
  ```