指向性メモ::2008-12-18::RubyのBlockが欲しいよ

ページ情報
制作日
2008-12-18T16:03:34+09:00
最終更新日
2008-12-18T16:03:34+09:00
ページ内目次

AdaもRubyみたいに関数にブロック渡せればいいのになぁ。

OOPのドット記法みたいに、引数の最初(最後でもいいかも)にaccess {procedure, function}が来てる場合はブロックをおしりにつなげられるとか。

yield自体は普通に関数呼び出しでいいから予約後に足さなくてもいけそう。

たとえばmap!がこんな感じに書けるとか。

with Ada.Text_IO;         use Ada.Text_IO;
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
procedure Want_Yield is
   type Integer_Array is array (Integer range <>) of Integer;

   procedure Map (Block : access procedure (Element : in out Integer);
                  About : in out Integer_Array) is
   begin
      for I in About'Range loop
         Block (About(I));
      end loop;
   end Map;

   procedure Predefined_Three_Times (I : in out Integer) is
   begin
      I := I * 3;
   end Predefined_Three_Times;

   X : Integer_Array (1 .. 3) := (1, 3, 5);

begin
   -- 今許されている方法
   Map (Predefined_Three_Times'Access, X);
   Put (X(1)); Put (X(2)); Put (X(3)); New_Line;

   -- Ada15あたりで是非
-- Map (X) (I : in out Integer) do
-- begin
--    I := I * 3;
-- end Map;
-- Put (X(1)); Put (X(2)); Put (X(3)); New_Line;
end Want_Yield;

Comments

Trackbacks

Trackback Ping URI

http://yudai.arielworks.com/memo/2008/12/18/160334.trackback

末尾に「4 + 1」の計算結果を繋げて下さい。例えば計算結果が「17」の場合、「160334.trackback17」です。これは機械的なトラックバックスパムを防止するための措置です。

Post a comment

Name (optional)
Email address or URI (optional)
Do the math below (required to filter comment spams)
4 + 1 + 3 =
Message (required)
Submit
連絡先、リンク、転載や複製などについては『サイト案内』をご覧ください。Powered by HIMMEL

I ♥ Validator