[前][次][番号順一覧][スレッド一覧]

ruby-reference-manual:2917

From: Sho Hashimoto <sho-h@n...>
Date: Sat, 26 Nov 2011 15:49:08 +0900
Subject: [ruby-reference-manual:2917] [るりまプロジェクト - Bug #5672] Mutex#synchronize の戻り値


Issue #5672 has been updated by Sho Hashimoto.


> 返り値がブロックが最後に評価した値になるのであれば object を使うようにしてください。
>
> () は本当に何が返ってくるのかわからない場合に使用します。

なるほど。了解です。修正します。
----------------------------------------
Bug #5672: Mutex#synchronize の戻り値

http://redmine.ruby-lang.org/issues/5672

Author: Sho Hashimoto
Status: Closed
Priority: Normal
Assignee: Sho Hashimoto
Category: 
Target version: 
reporter: 
ruby_version: 


1.8.7 の Mutex#synchronize の戻り値が間違っているというつぶやきがありました。

http://doc.ruby-lang.org/ja/1.8.7/method/Mutex/i/synchronize.html

実装を確認してみると以下なので、ブロックが最後に評価した値を返すように思います。

  def synchronize
    lock
    begin
      yield
    ensure
      unlock
    end
  end

そのため、戻り値は不定として戻り値に関する言及を足しておきます。

  --- refm/api/src/thread/Mutex   (revision 4906)
  +++ refm/api/src/thread/Mutex   (working copy)
  @@ -43,10 +43,12 @@
   --- locked? -> bool
   mutex がロックされている時、真を返します。
   
  ---- synchronize { ... } -> self
  +--- synchronize { ... } -> ()
   
   mutex をロックし、ブロックを実行します。実行後に必ず mutex のロックを解放します
  。
   
  +ブロックが最後に評価した値を返します。
  +
   --- try_lock -> bool
   mutex をロックしようとして、ロックが成功した場合、真を返します。
   ロックできなかった場合にはブロックせず偽を返します。

1.9 系も実装は異なりますが同様です。(thread.c のコメントは正しいようでした)


-- 
http://redmine.ruby-lang.org

--
ML: ruby-reference-manual@m...
Info: http://QuickML.com/

[前][次][番号順一覧][スレッド一覧]

      2915 2011-11-26 03:11 [sho-h@n...          ] [るりまプロジェクト - Bug #5672][Assigned] Mutex#synchronize の戻り値
      2916 2011-11-26 07:19 ┣[okkez000@g...       ]                                       
->    2917 2011-11-26 07:49 ┗[sho-h@n...          ] [るりまプロジェクト - Bug #5672] Mutex#synchronize の戻り値