いつも、ご教授ありがとうございます。
Ruby でメソッドを自作してそのメソッドにブロックを持たせる場合
ブロック内で返り値を返すためにはどうしたらいいのでしょうか?
たとえば以下のような自作メソッドがあるとすると
def blocktest(str)
if (block_given?)
yield str
else
print "メソッドにブロックが与えられていない";
end
end
begin
#自作したメソッドにブロックを与えた場合
res = blocktest("ブロック付きメソッドのテスト") {|value|
print value;
print "<br/>"
print "メソッドに与えられた引数をprintしています"
return "ブロックで返り値"
}
print res;
print "<hr />"
#ブロックを与えない場合
blocktest("ブロック付きメソッドのテスト");
rescue => ex
print ex.message
end
上記のようにブロック内で返り値 を指定して変数resのその返り値を返したい場合
どうしたらいいのでしょうか?
一応、ブロック内でreturnで値を与えてはいますが、例外が発生します。
よろしくお願いしまう。
No.1ベストアンサー
- 回答日時:
そういうときは、return でなく、break を使います。
return はメソッドからの戻りなので、たとえば、
def foo
(1..10).each do |i|
return 1 if i==3
end
0
end
のreturnは、eachからの抜け出しでなく、fooの終了になります。
お書きのプログラムだと、メソッドの中じゃないのにreturnしてるので、エラーですね。
ブロックからの抜け出しはbreakです。
中級以上の話になると、lambdaとprocというオブジェクトがあって、lambdaのブロックの中ではreturnが使えるなど、ちょっとややこしい話になりますが、初級のうちは気にしなくていいでしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- その他(プログラミング・Web制作) pythonリストの特定の値を表示htmlで表示できない 2 2022/05/14 05:48
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- Java javaの質問です 次の機能を有するメソッド4つを自クラスに作成し、実装したいです 【機能】 足し算 1 2022/06/15 17:49
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- その他(プログラミング・Web制作) Pythonで複数のメソッドをまとめて管理する方法について 1 2023/03/30 00:01
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
- Visual Basic(VBA) シフト表のコマで「ブロック」されている前の時間の「出」を同一列の「休」と入れ替えたいがふぇきません。 2 2023/08/02 18:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ビーリアルのユーザー名を変え...
-
pandasでsqlite3にテーブル作成...
-
パイソンエラーについて
-
教えてください
-
pythonエラー
-
パイソンのクラスについて
-
バーチャルボックスが使えなく...
-
GitHubは初年度以外は有料にな...
-
パイソンプログラミング
-
power BI クエリエディター 〇...
-
【メモリ不足で落ちる(python)】
-
パイソンのクラスのブログラム
-
三項でたとえば交換って
-
パソコンのスクリーンセーバー...
-
パイソンのクラスについて
-
プログラミング
-
VBA
-
プログラミング講師はまだ需要...
-
パイソンでpy ファイルと p...
-
Ruby on Railsでサーバーを立ち...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ぱいソン
-
ハッシュ(単語数を数える) た...
-
Access2000にExcel2000のデータ...
-
Rubyの超初心者です。「戻り値r...
-
Ruby Fileクラスについて
-
RubyのProcについて
-
自作したメソッド・・・こんな...
-
pythonのerrorコード
-
get() と find() の違いについて
-
「arg」は何の略?
-
エラー「メソッドまたはデータ...
-
What class are you in? には何...
-
パイソンのクラス
-
教えてください。vb5.0
-
No route matches [GET] "/post...
-
クラス名やモジュール名の競合...
-
VBAで型が一致しないエラー(バ...
-
Rubyについて質問です
-
実行時エラー450:引数の数が一...
-
エクセルVBA オートフィルタで...
おすすめ情報