質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

1245閲覧

Rubyでの型変換

akuta

総合スコア12

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2016/10/22 10:05

C++の
bool(*decision[])(int) = { decision, decision2 };

をRubyで書きたくて調べたのですが、うまく書けません

どうやればいいのでしょうか?
お願いします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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

raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問