C++の
bool(*decision[])(int) = { decision, decision2 };
をRubyで書きたくて調べたのですが、うまく書けません
どうやればいいのでしょうか?
お願いします
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
C++とは違い、Rubyには次のような特徴があります。
- Rubyの変数には型がありません。
- Rubyのメソッドそのものは第一級オブジェクトではありません(厳密にはRubyには関数すらありません)。ただし、
Object#method
によりオブジェクト化したMethodやラムダ式などのProcは第一級オブジェクトとして扱えます。
つまり、型変換ということ自体が無く、関数を関数そのもとして扱うことができないため、C++のコードと全く同じような意味を表すコードは不可能です。しかし、前後の意味から、同じ意味になるであろうコードを書くことはできます。たとえば、下記の二つはほぼ同じ処理をしていることになります。
C++
1#include <iostream> 2 3int main() 4{ 5 auto decision1 = [](auto x) { return x > 0; }; 6 auto decision2 = [](auto x) { return x < 0; }; 7 bool (*decision[])(int) = {decision1, decision2}; 8 int list[] = {-1, 0, 1}; 9 for (auto i : list) { 10 std::cout << std::boolalpha; 11 std::cout << "check: " << i << std::endl; 12 std::cout << " positive? " << decision[0](i) << std::endl; 13 std::cout << " negative? " << decision[1](i) << std::endl; 14 } 15 return 0; 16}
Ruby
1decision1 = -> (x) { x > 0 } 2decision2 = -> (x) { x < 0 } 3decision = [decision1, decision2] 4list = [-1, 0, 1] 5list.each do |i| 6 puts "check: #{i}" 7 puts " positive? #{decision[0].(i)}" 8 puts " negative? #{decision[1].(i)}" 9end
※ C++のコードはC++14以上でコンパイルしてください。
投稿2016/10/22 11:16
総合スコア21735
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。