雲雀は高く空を舞い このページをアンテナに追加 RSSフィード

「ひよこは高く空を舞い」について

2006-06-15

[]evalは使うべきではない evalは使うべきではない - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク - evalは使うべきではない - 雲雀は高く空を舞い evalは使うべきではない - 雲雀は高く空を舞い のブックマークコメント

no titleより

eval を使うべきでない理由

eval は Code Clarity / Readability, Efficiency, Analyzability の点から使うべきでは無い。

eval を使った文は読みづらく、流れを追いにくい。そのため解析もしづらくなる。

また、Matlab ではコードを実行する際に、コードを内部コードに変換してから実行する。再度コードが実行される際、コードになんの変更もなかった場合その変換作業は省かれる。しかし、文中でevalが使用されていた場合は、同一性が保証されないため、毎回変換作業が必要となり、そのために効率性に欠ける。

evalを避けるテクニック

functional formってのはスペースでコマンドを分けるのでは無く()を使えってことかな。

例えば

a) save mydata.mat x y z
b) save('mydata.mat',x,y,z)

a)でなくb)と書く、とか。a)の場合はsaveに続くものがすべて文字列扱いされてしまうけどb)の場合はそうではないから柔軟な書き方が可能である、ってことか。

str2funcは文字列を引数に、その関数ハンドルを出力するみたい。関数ハンドルはよく分からない。

str2func

目的

関数名文字列から関数ハンドルを作成

表示

fhandle = str2func('str')

詳細

str2func('str') は、文字列 'str'の中で名付けられた関数に対して、関数ハンドル fhandleを作成します。

@function シンタックス、または、コマンドstr2func のいずれかを使って、関数ハンドルを作成できます。 この演算を文字列のセル配列に適用することもできます。 この場合、関数ハンドルの配列が戻されます。

また、続く「no title」では構造体を使え、と述べている。fieldnamesと、動的フィールド参照を使えば良いじゃない、って感じ。また、.matファイルからのデータのロードも構造体としてロードできる。

MyData = load('data.mat');


cat::Matlab

トラックバック - http://chick.g.hatena.ne.jp/allegro/20060615
テクノラティプロフィール