回答編集履歴
1
移動
answer
CHANGED
@@ -25,4 +25,47 @@
|
|
25
25
|
values_b = hb.values_at(*keys)
|
26
26
|
keys.zip(values_a, values_b) do |key, a, b|
|
27
27
|
...
|
28
|
-
```
|
28
|
+
```
|
29
|
+
|
30
|
+
----
|
31
|
+
|
32
|
+
「上から判定する」という事に注意して
|
33
|
+
if a && a.between?(1,18) && b == 10
|
34
|
+
などとする必要があります。
|
35
|
+
が、無駄に長くなるのでsafe navigation operatorを用いて
|
36
|
+
|
37
|
+
```erb
|
38
|
+
<span>
|
39
|
+
<% if a.nil? && b.nil? %>Finish
|
40
|
+
<% elsif a.nil? && b&.between?(11,18) %>アウトスタートで、インプレイ中 <%= b - 1 %>
|
41
|
+
<% elsif a.nil? && b == 10 %>アウトスタートで、アウト終了 <%= a %>
|
42
|
+
<% elsif a == 1 && b.nil? %>インスタートで、イン終了 <%= a - 1 %>
|
43
|
+
<% elsif a == 1 && b&.between?(11,18) %>インスタートで、インプレイ中 <%= b - 1 %>
|
44
|
+
<% elsif a&.between?(2,9) && b == 10 %>アウトスタートで、アウトプレイ中 <%= a - 1 %>
|
45
|
+
<% elsif a&.between?(1,9) && b.nil? %>インスタートで、アウトプレイ中 <%= a - 1 %>
|
46
|
+
<% else %>なんか変なスコアのいれ方です
|
47
|
+
<% end %></span><br>
|
48
|
+
```
|
49
|
+
などとするとよいでしょう。
|
50
|
+
|
51
|
+
ただし、これは見やすいのはいいのですが何度か同じ判定をしているのが非効率で気になりますね。
|
52
|
+
|
53
|
+
---
|
54
|
+
|
55
|
+
パターンマッチを用いた場合は
|
56
|
+
|
57
|
+
```erb
|
58
|
+
<span>
|
59
|
+
<% case [a, b]
|
60
|
+
<% in [nil,nil] %>Finish
|
61
|
+
<% in [nil, 10] %>アウトスタートで、アウト終了 <%= a %>
|
62
|
+
<% in [1, nil] %>インスタートで、イン終了 <%= a - 1 %>
|
63
|
+
<% in [nil, 11..18 => hole] %>アウトスタートで、インプレイ中 <%= hole - 1 %>
|
64
|
+
<% in [1, 11..18 => hole] %>インスタートで、インプレイ中 <%= hole - 1 %>
|
65
|
+
<% in [2..9 => hole, 10] %>アウトスタートで、アウトプレイ中 <%= hole - 1 %>
|
66
|
+
<% in [1..9 => hole, nil] %>インスタートで、アウトプレイ中 <%= hole - 1 %>
|
67
|
+
<% else %>なんか変なスコアのいれ方です
|
68
|
+
<% end %></span><br>
|
69
|
+
```
|
70
|
+
|
71
|
+
等も可能ですが、2.7時点ですと警告が出るなど常用は難しいです。
|