FC2ブログ
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
クロージャの使いどころ
Perlで定数を使おうと思うと、あるモジュールを use しないといけなかったりしますが、クロージャを使えば、自前で作れたりします。

僕は、値を書き換えないように決めの問題(ルール)にしてしまえばいいと思うので、ハッシュテーブルか設定ファイルで済ませますが、以下のソースでクロージャによる定数(のようなもの)が作れます。

use Data::Dumper;

sub make_const {
  my $o = { %{$_[0]} };        # こいつに隠し持つ
  return sub { $o->{$_[0]} };  # この関数によってしかアクセスできないようにする
}

my %h         = ('a'=>1, 'b'=>2);
my $h_const   = make_const(\%h);

print $h_const->('a') . "\n";
$h{'a'} = 10;
print $h_const->('a') . "\n";

$h_const->('a') = 9;             # 文法エラー:関数呼び出しに代入は不可能

# 無名ハッシュでかっこ良く生成する方法
my $n_const = make_const({'c'=>2, 'd'=>3});  


なお、この方法はJSでも使えそうです。


よくかんがえたら、隠し持つのは { } と、無名ハッシュでかぶせる必要なかったなぁ。
sub make_const {
  my %o = %{$_[0]};          # こいつに隠し持つ
  return sub { $o{$_[0]} };  # この関数によってしかアクセスできないようにする
}
スポンサーサイト
コメントを投稿する
Name:
URL:
Comment:

秘密:管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL
この記事にトラックバックする(FC2ブログユーザー)
ブログ検索

プロフィール

ビンゴ中西
Perlが好きである。
プログラミング言語のほとんどは独学。独学の過程で多くのプログラム仲間にも色々教わりました。

FC2カウンター

カレンダー

10 | 2018/11 | 12
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -

ブロとも申請フォーム

この人とブロともになる

| ホーム |
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。