「レキシ」を含む日記 RSS

はてなキーワード: レキシとは

2011-03-16

ドラゴンボールで学ぶオブジェクト指向」 のクロージャに関して

http://anond.hatelabo.jp/20110316202255 - ドラゴンボールで学ぶオブジェクト指向

また、ポイポイカプセルのように技を塊にして色んな人が使えるように出来ます

var shotKamehameha = new function(){
	//かめはめ波を打ちます。
}

noumin.kougeki = sendKamehameha;
buruma.kougeki = sendKamehameha;

noumin.kougeki();  //カメハメ波がでます

このような仕組みをクロージャと言います。クロージャクロージャの中に記述することも出来ます

って書いてるけど、クロージャってのはそういうものじゃないよなぁ、と。 まあファーストクラス関数オブジェクトっていうところはあってるけど、それだけでクロージャと言えるのかというとちょっと違う。

"a closure is a first-class function with free variables that are bound in the lexical environment." (Closure - Wikipedia) とあるように、関数内の変数レキシカルスコープに結び付けられているようなものがクロージャなのであるJavaScript で例を書くなら、次のようになる。

// クロージャを返す関数
var getClosure = function getClosure() {
    // クロージャからアクセスされる変数
    var counter = 0;
    // クロージャ
    var closure = function closure() {
        return counter++;
    };
    return closure;
};

// クロージャを取得
var closure = getClosure();

// クロージャを実行
closure(); //=> 0
closure(); //=> 1
closure(); //=> 2

匿名ダイアリーで大なり記号とか書くときってどうしたらいいんですかね... ">" ってなっちゃ

2011-02-01

大学院博士課程はどうなるべきなのか?

id:aionarapです自分ブログがなく,ブコメじゃ情報を書き足りないのでこの場をお借りしました


エントリを書くきっかけ

“徒弟制度”や修士論文の廃止求める 大学院博士課程で中教審答申 - MSN産経ニュース http://sankei.jp.msn.com/life/news/110131/edc11013122040003-n1.htm

はてなブックマーク - “徒弟制度”や修士論文の廃止求める 大学院博士課程で中教審答申 - MSN産経ニュース http://b.hatena.ne.jp/entry/sankei.jp.msn.com/life/news/110131/edc11013122040003-n1.htm



この中教審答申に関して,ブコメでは否定的な意見が多数,というか肯定意見は皆無ですね.しかし,私個人はある程度この試みに賛成です.あ,先に書いときますが,完全肯定じゃないですけどね.修論は書いたほうがいいし,徒弟制の完全廃止もどうかとは思っています.

じゃぁ何が賛成なのよ,という話ですが,Qualifying Examの導入,及び広い範囲の教育に関してです.これは必須,と私は考えています.この辺りのお話に関するご意見を皆さんに聞いてみたいと思い,当エントリを書くことにしました


要約

今回の中教審答申は,博士の現状の問題を反映した意欲的な取り組みに感じる.丸呑みにするには良くない部分もあるが,期待しても良いのではないのか.



博士はなんなのか

さて,そもそもの出発点ですが,博士は「スペシャリスト」でありさえすれば良いのでしょうか?私は否と考えます博士こそ「ジェネラリスト」にもならねばならない.…と書くと誤解を招きますね.要は専門馬鹿なっちゃいかん,ということです

勿論,博士課程の人間自分の専門分野に関して,国際的な第一線に立てるような知識と経験が必須です一生懸命自分研究に取り組む必要がありますですが,それだけではダメで,最低限隣接領域(まぁ定義微妙ですが)に関して,可能であればもっと大きな枠組で知識を深めなきゃいけません.科学技術はどんどん煮詰まってきて,先に進むためには学際分野の融合による新しい概念の創出が必要です.それをイノベーションと呼ぶこともあるでしょう.それを生み出すためには,少なくとも2つの分野に関してよくものを知っていないといけません,そうですよね?

テクニシャンとして分野を極めるのもひとつの道かもしれませんが,博士に求められているのはそういうことではないと私は考えています.



国はどういうつもりで博士を育てているのか

加えて,博士が「スペシャリスト」のみを意識していると,博士課程の人材の活用先は研究者,それもかなり狭い分野に限定されます

ここで,大学院設置基準が定めている博士課程の役割を見てみましょう.昭和49年の時点では,

「専攻分野について,研究者として自立して研究活動を行うに必要な高度の研究能力及びその基礎となる豊かな学識を養うことを目的とする。」

というものでした.それを,平成元年の時点で

「専攻分野について,研究者として自立して研究活動を行い,又はその他の高度に専門的な業務に従事するに必要な高度の研究能力及びその基礎となる豊かな学識を養うことを目的とする。」

と,敢えて変更を行っています.差分は,

「又はその他の高度に専門的な業務に従事するに必要な高度の研究能力

が必要,と明文化したところ.その意図を,

社会の多様化,複雑化等に対応し,博士課程において,大学等の研究者のみならず,社会の多様な方面で活躍し得る高度の能力と豊かな学識を有する人材養成する必要から明確化」

した,と説明しています.

(以上,http://www.mext.go.jp/b_menu/shingi/chukyo/chukyo0/toushin/05090501/021/003-3.pdfの2ページ目より引用.)

平成元年の時点で,大学院設置基準は博士課程学生に「社会の多様な方面で活躍しうる」人材たることを求めているのです



博士はどこで活躍できるのか / あるいはすべきなのか

「おいおい,博士研究者にならなくてどうするのよ…」という意見もあるでしょう,それは理解します.ですが,包含関係を取り違えてはいけません.研究者として生きて行けるのは,博士号を取得したうちの一部の人です研究者になるのは博士号取得者でしょう.です博士号取得者は全員研究者はなれません.国家として,限られた国庫の中から博士を全て取り込めるほどポストを恒久的につくるのなら別ですけどね….



それに,(ありえませんが)もしそうなったとしても,全員研究者になるのもどうかと思います.一人ひとりが研究テーマを持って,プロジェクトリーダー的な役割を果たしつつ,世界最先端を突っ走ってきた人間が,その経験と知見を他の分野に持っていくことは非常に意義があるでしょう.ある意味,一人でプロジェクトチームに求められる役割を全て果たす必要があるのですから,その能力は推して知るべしです.是非,社会のあちこちで活躍するべきです



非常にポピュラーなのは,専門を活かした職業でしょう.企業での研究開発を初めとした「明示的に博士を求めている」職業は多いです.…まぁ敢えて書く必要はないですね.

初等,中等教育の教師もいいでしょう.勿論高専も.起業もいいですね.



そして,本当はその他の「博士が求められていない」と考えられている職業にも行ったほうがいいと思うんですだって,ずっと知的体力を鍛えてきたわけですから,同年代博士号非保持者と比較してその辺りは大きくリードしているはずです

彼ら/彼女らが持っている問題発見能力は,必ずや企業にとって大きな助けになります



現状はどうなのか

前節の内容に関して,同意して頂けましたでしょうか?して頂けた方も,そうでない方もいらっしゃるでしょう.

でも,同意/非同意にかかわらず,ほとんどの人は「夢物語乙!www」という感想を抱くのではないでしょうか.いえ,私もそう思います.

だって現状が全く異なるのですから



例えば,id:scicom 氏の快著,「博士漂流時代「余った博士」はどうなるか?」(http://goo.gl/Pd0ls amazonへのリンク)には現状の博士号取得者,特にポストドクター(PD)の状況が整理されています.

簡潔に言えば,現状は散々たる物です企業博士号に魅力を感じていません.これは伝聞ですが,採用担当者は「博士は当たり外れが大きい」と感じているようです.ハズレを引くリスクを恐れて採用を控えるそうです



そもそも,皆さん,博士号をとっている人間が「最低限」「共通して」何を出来るか,分かりますか?

言い換えると,博士号が担保しているものは何か,知っていますか,ということです

公開されたばかりの中教審の資料から引用しましょう.

特に,博士課程では,①学生特筆すべき顕著な研究業績を求める大学院もあるなど,博士学位が如何なる能力保証するものであるかについての共通認識確立されていないこと,②博士課程(後期)の教育が,個々の担当教員がそれぞれの研究室等で行う研究活動を通じたものにとどまり,学位プログラムの整備という観点から不十分であること,③大学産業界等との間において,大学院養成する人材像と産業界等の評価や期待に関する認識の共有が十分でなく,修了者が産業界等の社会の様々な分野で活躍する多様なキャリアパスが十分に開かれているとは言えないこと,といった問題点が見られる

(http://goo.gl/Jq0LU, pdfファイル,5ページ目)

文科省は,博士号が担保するものに関する共通理解は無い,と述べています.また,教育の質もバラけていることを指摘しており,このことも共通理解の妨げになるかと思います.



個人的には,博士号は「専門知識」と「プロジェクト(研究)遂行能力」は担保していると思います.…が,サンプル数が少ないので断言はできません.



この「一般的な博士像の不存在」が,世間一般への博士の浸透を妨げていることは想像に難くありません.



現状は問題なのか

敢えて節を作って強調しますが,現状は問題です



当の本人たる博士号取得者は活躍の場が減る,すなわちたつきの道の選択肢が減ります

納税者の皆さんは,せっかくお金をつぎ込んで育てた人材が有効に活かされず,「税金無駄だ!」と感じるかもしれません.

後進の学生は,この惨状を見て博士に進まなくなります(というかそうなってます).

こうして,本丸たるアカデミック世界ごとジリジリと衰弱し,…あとは言わずもがな.



どうすればよいのか

勿論,「これさえやれば万事解決!」みたいな簡単な処方箋はないでしょう.でも,チャレンジは出来ます

私は,そのチャレンジの一環が今回の中教審答申だったのではないか,と考えています.(というか資料はそれを物語っています)



すなわち,博士の質を担保すれば良いのです



専門の知識だけではなく,基礎知識や計画力語学力倫理観などもちゃんと持っていることをQualifying Examで保証しましょう.

教育の質がばらけない様に,たくさんの先生教育しましょう.

どこに放り出しても生きて行けるほど強くするために,総合的な教育もちゃんとしましょう.



そういった取り組みが,今回の答申意図はないのでしょうか.

この新課程を出た博士がその有用性をアピール出来れば,在野の博士号取得者にもスポットが当たり始めるでしょう.



さて,ここで,「大学院に進んでまで人に教育を受けるとかwww自分で学べよそれぐらいwww」という気持ちになる人もいるかもしれません.

正直,私も「それぐらいじぶんでするわい」と思ってたりします.

でも,主眼はやっぱり「質の保証」なんだと思います.ちゃんと大学院は「最低限」「共通して」一定の能力を持った博士を輩出しますよ,という保証

さぁ,雇用者の皆さん,安心して雇用してください.

さぁ,経営者の皆さん,安心して共同事業を博士経営するベンチャーと行って下さい.

さぁ,保護者の皆さん,安心して博士教員を迎え入れてください.

そういう事を,皆が自信を持って主張できるように,ということでしょう.


ちょっとやりすぎじゃないのか?

ええ,上記の効果を狙ったとしても,逆効果になる部分もあるでしょう.

徒弟制を完全廃止すると,一本軸の通った研究ができなくなって,結果として「スペシャリスト」にもなれなくなります

(念の為に再度主張しますが,博士は「スペシャリスト」の能力を最低限備えてなければなりません,と考えています)

博士課程に進学希望学生修士論文書かないと修士/博士の間のフレキシビリティを損なうことになります



なので,細かい部分は考える必要があるでしょう.

でも,今回みたいに,現在抱えている問題に対してちゃんとコミットメントしたということで,私は文科省をちょっと見直しました

というかなんか雰囲気で「お役人は肝心なことに取り組まない」みたいな思い込みがあったのですが,やっぱりそんなこともないよなぁ,と思いました

なんせ,前述の「博士漂流時代」を読んで気になったことを調べ始めたら,殆ど中教審の資料にまとめられていたのですから



さて,長くなりましたが,これにて本エントリはお終いです.お付き合い下さり誠にありがとうございます

意見コメント,批判,大歓迎です.皆さんの意見を知りたいです

私のtwitterアカウントhttp://twitter.com/aion_a_rapですので,何か有りましたら.

2010-07-02

XmlSerializer vs SoapFormatter

.NETオブジェクト永続化によく使われる、この二つのクラスの違いについて書きます。サンプルコードなどは書きませんので必要ならリンクを参照してください。ずいぶん古いネタだけど、許してね。

全体的に速度が重要場合永続化するオブジェクトが単純な場合XmlSerializerを、それ以外の場合SoapFormatterを使うのが良いと思う。なるべく短いコード量で行きたいならSoapFormatterの方がベター

あと、細かいことだけどTypeConverterは便利なので使うべし。シリアライズ不可能な小さなクラスとか特に有効。

2009-12-01

http://anond.hatelabo.jp/20091201013806

普通にクロージャという場合、レキシカルスコープを持つことを期待されると思うけど、DLLやらsoからエクスポートされる関数普通のCのスコープだからクロージャとは言わないと思うよ。(そもそもDLLもsoも標準C/C++じゃないから、もしこれらがクロージャ的な動きをするとしてもこれを以て「Cのクロージャ」と呼ぶのはおかしいというのは置いといても。)

ダイナミックスコープなemacs Lispのlambdaとか、ダイナミックスコープもどき(っていうのか?なんて表現したらいいか分からん)なPHPのcreate_functionは動的に作りはしてもクロージャとは言わないんじゃないかな。

http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AD%E3%83%BC%E3%82%B8%E3%83%A3

2008-10-15

[][]いまいちな用語

javascriptを理解するためのたった2つの大切なことjavascriptを理解するためのたった2つの大切なこと:改(改があるなんて知らなかった)を読んで感じたところ。

束縛、レキシカルスコープクロージャーがミソなんだけど、イメージが掴み難い用語だと思う。

増田のみんなだったら、もっといけてる言葉してくれそうなんで、聞いてみる。

みんなだったらなんて呼ぶ?

2008-06-21

[]もういつでもどこでもだれでもMooseでいいじゃねぇか

おれはもうMooseしかつかわねぇ。後にも先にもMooseMooseMooseMooseMoose!!!!!!!!!!!1111111

ってな人の為にいつでもどこでもMooseする。automooseを実装しますた


package automoose;
use strict;
use warnings;

sub import {
    strict->import;
    warnings->import;
}

package automoose::before;
use Moose; no Moose;

package automoose::after;
use Moose;

my @before  = keys %automoose::before::;
my @after   = keys %automoose::after::;
my @exports = do { my %u; @u{@before} = (); grep { !exists $u{$_} } @after };

package UNIVERSAL;
use Moose;

for my $func (@exports) {
    __PACKAGE__->meta->remove_method($func);
    __PACKAGE__->meta->add_method($func,sub {
        my $class = shift;
        my $auto  = $class.'::__auto__';
        no warnings 'redefine';
        local *Moose::_get_caller = sub { return $class };
        Moose->import( { into => $auto } );
        my $code = $auto->can($func);
        $class->meta->add_method($func,sub {
            shift;
            goto $code;
        });
        goto $code;
    });
}

1;

使い方はいたって簡単。useするだけ。


use automoose;

my $obj = Foo->new;

いきなりnewが呼べちゃう。

他にも


use automoose;

Foo->has( hoge => is => 'rw' ,default => 9999 );
Foo->has( muge => is => 'rw' ,default => 7777 );

print Foo->new->hoge;
print Foo->new->muge;
Bar->extends('Foo');

print Bar->new->hoge;

ょーかんたん。げーべんり。


しっかしこれ、automooseだけど実装するの結構めんどかったのよ。Moose-0.44をベースに作ったんだけどさ。

Moose内部で使用している$CALLERって変数レキシカルなもんだから、どうやってそれを外から制御すればいいのかすんごい苦労したわけさね。

で結局importの引数にinto渡してさらにMoose::_get_caller関数を上書き無理矢理ハックしたってわけさ。



でもね。でもね。でもね。ちょっと聞いてよ。

ふと最新のMoose-0.50見てみたらさ、Moose::__CURRY_EXPORTS_FOR_CLASS__なんて関数定義されてるわけよ。

外から明示的に$CLASSを変更できるインターフェイスなわけよ。おいおいおいおい、勘弁してくれよ。こっちゃ折角苦労してハックしたのにあっさり公式対応するなってばよ。メゲルヨ?ぼく。

まぢめげるよ。めげる。ってかもうめげたよ。もうMooseなんてつかわんね!つかわんね!

Mooseなんて大嫌いだー!

俺はMooooooooooseをやめるぞぉおおおおおおおおお、JOJOぉぉぉおおおおお!!!!11



プログラ増田のあなぐら

2007-06-22

javascriptを理解するためのたった2つの大切なこと:改

9割ぐらいはハッシュ

何がハッシュなのか

javascript存在するほとんどオブジェクトの実体はハッシュだよ。

var arr = [0,1,2,3];

とかをみると配列(人によってはリスト)に見えると思う。でも実際は違うんだ。

これは

var has = {0:0,1:1,2:2,3:3};

と基本的には等価なんだ。ただちょっと束縛されているメソッド(インターフェイス)が違うだけ。

ためしに

arr[4] = 4;
arr['x'] = 'string';
arr[-1]  = -1;

としてみよう。

Firebugで確認してみると[0, 1, 2, undefined, 4]というような値がかえってくるよ。

でもarr[-1]やarr['x']の値は保存されてないのかな?そんなことはないちゃんとアクセスできるんだ。

それどころかarr.xで'string'がかえってくるんだ。


別の例を見てみよう。

var fx = function(){};
fx[0] = 'somestring';

こうするとfx[0]に'somestring'が束縛される。

つまりfunctionも一つのハッシュだったんだ。

これでほとんどのものがハッシュだということが解ってくれたかな?

ハッシュじゃないのは文字列とか数字とかそいういシンプルなものだけなんだ。

ハッシュへのアクセス

ハッシュへはhash[name]でアクセスすることが出来る。

それ以外にもname演算子や空白を含まなくて頭が数字でない場合はhash.nameでアクセスできるんだ。

これでhash[name]が関数だったらhash.name(args)とできるよ。まるでメソッドみたいだね。


関数のあれこれ

無名関数

関数には名前を付けなくても使用可能だよ。

function(x){return x+x}(2); -> 4
宣言文

関数宣言の書き方って次見たいの覚えてる人が多いんじゃないかな?

function funcname(args){ do something};

でもこれはsystax sugerだってことを知ってほしい。

上でも使ってるんだけど。

var funcname = function(args){ do something};

等価になる。もちろんどちらの書き方でもかまわないよ。

ただ、(無名)関数を宣言してそれをfuncnameに束縛しているっていうことを理解しておくと便利だよ。


スコープ closure

javascriptレキシカルスコープを採用してるんだ。

レキシカルスコープなんていうと難しく感じるかもしれないけど、結構単純なんだ。

var x = 'global';
var fx1 = function(){return x};
var fx2 = function(){var x = 'local';return x}

これの実行結果は以下になるよ。

fx1() -> 'global'
fx2() -> 'local'
fx1() -> 'global'

fx2の変数xはほかの場所に影響しないんだ。これは関数の中と外ではスコープが違うからなんだ。

でも以下のような場合に注意してほしいな。

var x = 'global';
var fx1 = function(){return x};
var fx2 = function(){x = 'local';return x}
fx1() -> 'global'
fx2() -> 'local'
fx1() -> 'local'

fx2は自分のスコープ変数xがないからその外側スコープに探しに出かけたんだ。

つまり宣言文varはそのスコープに新しい名前を登場させる機能なんだよ。


別の場合を見てみようね。

var x = 'global';
var fx1 = function(){
  var x = 'local';
  return function(){return x}
};
var fx2 = fx1();
x -> 'global'
fx2() -> 'local'

この例だとfx2()の値がlocalになってるね。

なぜなら外側スコープっていうのは関数を評価した場所じゃなくて、関数を定義した場所の外側なんだ。

関数は返り値として関数ハッシュを指定できるよ。

一つ上の例では実際に関数を返り値にしているね。

戻り値関数を指定するとこんなことが出来るよ。

var fx1 = function(){
  var x = 0;
  return function(){
    x = x+1;
    return x;
  }
};
var fx2 = fx1();
var fx3 = fx1();
fx2() -> 1
fx2() -> 2
fx2() -> 3
fx3() -> 1
fx3() -> 2

fx2とfx3の値が違うのはそれぞれ別の関数が作られるからだよ。

こんな風に関数が状態を持つことも出来るんだ。クロージャーとよんだりするよ。

関数ハッシュを使って複数の関数を返すとこんなことも出来るよ。

var fx = function(){
  var x = 0;
  return {
    'up':function(){
      x = x+1;
      return x;
    },
    'down':function(){
      x = x-1;
      return x;
    }
  }
};
var obj = fx();
obj.up(); -> 1
obj.up(); -> 2
obj.down(); -> 1
obj.down(); -> 0

最後に一度ハッシュについてもうちょっとだけ。thisのはなし。

thisという機能があるよう。ちょっとだけつかってみるね。

var x = 0;
var add = function(n){this.x = this.x + n; return this.x};
var mul = function(n){this.x = this.x * n; return this.x};
var obj = {'x':0,'do':add};
add(1);   -> 1
add(1);   -> 2
mul(2);   -> 4
obj.do(); -> 1
obj.do(); -> 2
obj.do = mul;
obj.do(); -> 4

thisは評価された場所によって値がかわるよ。

objの中にいるときはobj.xを扱うし、グローバルにいるときはグローバルのxを扱うんだ。



http://anond.hatelabo.jp/20070620200618を改訂してみたよ。

このぶんしょうがjavascriptを覚える上の一助になるとうれしいんだ。

あとここでつかってるハッシュ伝統的な意味連想配列のことね。

突っ込みも大歓迎だよ。

2007-06-20

javascriptを理解するためのたった2つの大切なこと

9割ぐらいはハッシュ

何がハッシュなのか

javascript存在するほとんどオブジェクトの実体はハッシュだよ。

var arr = [0,1,2,3];

とかをみると配列(人によってはリスト)に見えると思う。でも実際は違うんだ。

これは

var has = {0:0,1:1,2:2,3:3};

と基本的には等価なんだ。ただちょっと束縛されているメソッド(インターフェイス)が違うだけ。

ためしに

arr[4] = 4;
arr['x'] = 'string';
arr[-1]  = -1;

としてみよう。

Firebugで確認してみると[0, 1, 2, undefined, 4]というような値がかえってくるよ。

でもarr[-1]やarr['x']の値は保存されてないのかな?そんなことはないちゃんとアクセスできるんだ。

それどころかarr.xで'string'がかえってくるんだ。

別の例を見てみよう。

var fx = function(){};
fx[0] = 'somestring';

こうするとfx[0]に'somestring'が束縛される。

つまりfunctionも一つのハッシュだったんだ。

これでほとんどのものがハッシュだということが解ってくれたかな?

ハッシュじゃないのは文字列とか数字とかそいういシンプルなものだけなんだ。

ハッシュへのアクセス

ハッシュへはhash[name]でアクセスすることが出来る。

それ以外にもname演算子や空白を含まなくて頭が数字でない場合はhash.nameでアクセスできるんだ。

これでhash[name]が関数だったらhash.name(args)とできるよ。まるでメソッドみたいだね。

関数のあれこれ

スコープ

javascriptレキシカルスコープを採用してるんだ。

var x = 'global';
var fx1 = function(){return x};
var fx2 = function(){var x = 'local';return x}

これの実行結果は以下になるよ。

fx1() -> 'global'

fx2() -> 'local'

fx1() -> 'global'

fx2の変数xはほかの場所に影響しないんだ。これは関数の中と外ではスコープが違うからなんだ。

でも以下のような場合に注意してほしい。

var x = 'global';
var fx1 = function(){return x};
var fx2 = function(){x = 'local';return x}

fx1() -> 'global'

fx2() -> 'local'

fx1() -> 'local'

fx2は自分のスコープ変数xがないからその外側スコープに探しに出かけたんだ。結果fx

つまり宣言文varはそのスコープに新しい名前を登場させる機能なんだよ。

宣言文

関数宣言の書き方って次見たいの覚えてる人が多いんじゃないかな?

function funcname(args){ do something};

でもこれはsystax sugerだってことを知ってほしい。

上でも使ってるんだけど。

var funcname = function(args){ do something};

等価になる。もちろんどちらの書き方でもかまわないよ。

ハッシュを返す関数関数を返す関数。closureとthis

関数は返り値として関数ハッシュを指定できるよ。次のハッシュを返す関数を見てみよう。

var fx = function(){
  var x = 0;
  return {
    'x':x,
    'add1':function(y){this.x = this.x+y;return this.x},
    'add2':function(y){x = x+y;return x}
  }
}
var obj = fx();

実行結果を見てみよう

obj.x -> 0
obj.add1(0) -> 0
obj.add1(0) -> 0

obj.x -> 0
obj.add1(1) -> 1
obj.add1(0) -> 0
obj.x -> 1

obj.x -> 1
obj.add1(0) -> 1
obj.add1(2) -> 2
obj.x -> 1

となる。

add1はthis.xにたいして演算をしている。つまり返された値が変化しているんだ。

add2は関数fxに閉じ込められた値に対して演算している。つまりこれらは別の値なんだ。

とここまでかいたら疲れた。

読んでくれた人ありがとう

追記

落書きのつもりでかいたんだけどブクマがついててびっくり。

ちゃんとまとめてなかったし、自分のブログに描いても見てくれる人はいないから増田に書いてみたよ。

ほかの言語技術についても同じような解説が欲しかったら何らかの方法で言及してくれるとうれしいな。

さらに追記

ここまではてブが300突破してるみたいだけどいま、自分のブログリンクを張ったら増田に書く意味がなくなるんじゃないかと思うんだ。

やらないけど。

こんなのもかいてみたよ、増田で。 http://anond.hatelabo.jp/20070621153600

2007-04-30

ブロック付きメソッド呼び出し/レキシカルクロージャについて

ブロック付きメソッド呼び出し」がわからん、ということでいいのかな。この概念は是非とも解ってほしいので、今日始めて Ruby を触った俺が頑張って解説しよう、と思ったけれど、いいドキュメントを見つけたのでリンクしておくよ。

これで解らんかったらOn Lispを途中まで読みんさい(お金がないならWeb 版をどうぞ)。「ブロック付きメソッド呼び出し」は元々関数型言語の界隈で「レキシカルクロージャ」と呼ばれるもので、要するに中身は一緒なのでクロージャが解れば「ブロック付きなんたら」も解る(Ruby を触ったことのない自分が「ブロック付きなんたら」を理解しているのはこれの為)。 On LispCommon Lisp という言語の本なんだけど、 Ruby言語仕様の多くの点で Common Lisp を参考にしているので、勉強するのはそれほど難しくないと思う(つまり見た目はヘンテコだけど中身は Ruby ってこと)。

- 転職ならen
- 派遣ならen
 
1ページ中1ページ目を表示(合計:9件)