人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PerlまたはJavaScriptの質問です。Pythonではtype(obj)でオブジェクトのタイプ(整数とかリストとか)がわかり、dir(obj)でそのオブジェクトが持っているフィールドやメソッドの名前がわかります。PerlやJavaScriptに似たような機能はありますか?

●質問者: westfish
●カテゴリ:ウェブ制作
✍キーワード:Dir JavaScript Perl Python オブジェクト
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● くまっぷす
●30ポイント

dir(obj)に相当するものはよくわからなかったのですが、

Javascriptにはtypeof()演算子があり

http://www.res-system.com/item/505

Perlにはref演算子があって

http://www.7key.jp/program/perl/ref.html

http://www.rfs.jp/sb/perl/02/10.html

同じような用途に使えるようです。

◎質問者からの返答

なるほど、これで行けそうですね。ありがとうございました。

ここ以降の回答はdir(obj)に相当するものでお願いします。>他の回答者の方


2 ● znz
●20ポイント

JavaScriptではfor in ループを使えば列挙できます。

http://starry.night.nu/web/prog/javascript/c01_know_basic_behavi...


Perlの場合は

http://tokuhirom.dnsalias.org/~tokuhirom/tokulog/2149.html

no strict 'refs';
warn Dumper(keys %{"DateTime::"});

のようにパッケージのシンボルテーブルを参照するとそれっぽいことが出来るようです。

http://www.kt.rim.or.jp/~kbk/perl5.005/perlmod.html#Symbol_Table...

◎質問者からの返答

この方法ではパッケージ名を文字列として与えていますから、実用的目的には与えられたオブジェクトからパッケージ名を文字列として取得する方法が必要ではないですか?


3 ● znz
●30ポイント

blessされたオブジェクトかどうかのチェックはしていないですが、refと組み合わせてこのような感じでどうでしょうか?

#!/usr/bin/perl
use strict;
sub pythonic_dir {
 my $obj = shift;
 my $ref = ref $obj;
 no strict "refs";
 keys %{"${ref}::"};
}
use Data::Dumper;
use Jcode;
print Dumper(pythonic_dir(Jcode->new("")));
use Digest::MD5;
print Dumper(pythonic_dir(Digest::MD5->new));
◎質問者からの返答

なるほど、これで行けそうです。行頭につく$VARの必要性がいまいちわからなかったのでそれは取り除いてみました。

#!/usr/bin/perl

use strict;

use Data::Dumper;

sub pythonic_dir {

my $obj = shift;

my $ref = ref $obj;

no strict "refs";

my $dump = Dumper(keys %{"${ref}::"});

$dump =~s/\$VAR\d+ = //ig;

$dump =~s/;\n/, /ig;

return $dump;

}

use Digest::MD5;

print pythonic_dir(Digest::MD5->new);

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ