トップ回答者
新しい変数の名前を変数で宣言するには

質問
-
新しい変数を宣言するとき、その変数名をもともとある変数の値で宣言できませんか
たとえば、
dim a as string = "test" dim [a] as string
つまり2つ目に宣言する変数の名前をtestにしたいのですが、[a]のところはなんと記述すればいいのでしょうか。
- 編集済み shocho0101 2013年6月22日 8:02
回答
-
つまり2つ目に宣言する変数の名前をtestにしたいのですが、[a]のところはなんと記述すればいいのでしょうか。
無理でしょう。代替として、Jittaさんが書かれているようにDictionaryを使う他に、ExpandoObjectオブジェクトを使ってもそれっぽいことができると思います。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
- 回答の候補に設定 星 睦美 2013年6月24日 8:23
- 回答としてマーク shocho0101 2013年6月25日 10:36
-
shocho0101 さま よろしく。
一生懸命調べたのですが、やはり、難しいですね。
VB って中間言語経由のイメージ (個人的に) なので、変数名を置換できればいいんですけどね ... 駄目です。皆さんがお書きのように Dictionary や List(Of String) 等で逃げられますけど ... 。
実際の問題では、変数値が何回も変わったり幾つも作られたりするのでは。
重複宣言の問題や予約語とのバッティングなんかも考えられます。質問なさるため、問題を簡略化なさったと思うのですが、
もう少し、具体的にやりたい事を明示なさっては如何ですか。- 編集済み ShiroYuki_Mot 2013年6月22日 15:25 List(Of String) 追加
- 回答としてマーク shocho0101 2013年6月25日 10:36
-
一生懸命調べたのですが、やはり、難しいですね。
すみません、「調べた」ということは、「できるかもしれない」と思われた、ということですよね?どのようにしたらできるだろうと思われて、どのようなものを、どのように調べてみられたのでしょうか。
変数とは、内容を記録するためのメモリ位置を人間が記憶するためのものです。変数の内容が決まるのは、実行時です。変数の「名前」が必要なのは、コンパイル時です。「記録位置を人間がわかりやすいようにする」という目的を満足するために必要なときが「コンパイルまで」なので、コンパイル後に決まる名前を元にした記録はできない、と結論づけているので、調べてみようとも思いませんでした。
実現したいことと、質問のために用いた例が異なっていることは、よくありますね。たとえば、「仕様書の中の言葉で変数の宣言がしたい。しかし、仕様書で用いる用語がまだ決まっていないので、後で変わったときに対応したい」ということが考えられますね。
この場合は、プリプロセッサを自作したり、IDE 等のリファクタリング機能を利用することができます。Jitta@わんくま同盟
- 回答としてマーク shocho0101 2013年6月25日 10:37
-
Jitta さま ご指摘ありがとうございます。
最初の 3 行は余計ですね。 無知をひけらかしてしまいました。
お許し下さい。経緯は、以前使っていた言語が、中間コードにコンパイルする(インタープリータ)タイプのもので、変数名も置換が可能でした。
VB を使っていて、そんな必要も無く過ごしていましたが、もしやと思い調べた訳です。仰られる様に、実行時に変数値が変わる事も想定されたので、無駄な調べものかなぁという印象を持って調べていました。
質問者さんが、もし、同じ様な発想でご質問になったのなら という気持ちが、先の 3 行を書いた理由です。すみません。 ありがとうございました。
- 回答としてマーク shocho0101 2013年6月25日 10:38
-
話題が脱線気味ですが、コメントします。
eval(コードの実行時評価)のある言語では普通なことだと思います。eval "変数名" とされたら、その値を取り出せる必要がありますから。実行時に変数名でアクセスすることは、その変数が定義されているスコープを1つのハッシュ(.NETではDictionary)に見立てて、ハッシュアクセスすることと同等です。
ただし、VBには実行時に変数名でアクセスするようなことはなく、必要であればDictionaryを用意し、そこにアクセスすることになっています。(これがJittaさんの最初の回答。)
- 回答の候補に設定 ひらぽんModerator 2013年6月24日 15:30
- 回答としてマーク ひらぽんModerator 2013年7月2日 4:25
すべての返信
-
つまり2つ目に宣言する変数の名前をtestにしたいのですが、[a]のところはなんと記述すればいいのでしょうか。
無理でしょう。代替として、Jittaさんが書かれているようにDictionaryを使う他に、ExpandoObjectオブジェクトを使ってもそれっぽいことができると思います。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
- 回答の候補に設定 星 睦美 2013年6月24日 8:23
- 回答としてマーク shocho0101 2013年6月25日 10:36
-
shocho0101 さま よろしく。
一生懸命調べたのですが、やはり、難しいですね。
VB って中間言語経由のイメージ (個人的に) なので、変数名を置換できればいいんですけどね ... 駄目です。皆さんがお書きのように Dictionary や List(Of String) 等で逃げられますけど ... 。
実際の問題では、変数値が何回も変わったり幾つも作られたりするのでは。
重複宣言の問題や予約語とのバッティングなんかも考えられます。質問なさるため、問題を簡略化なさったと思うのですが、
もう少し、具体的にやりたい事を明示なさっては如何ですか。- 編集済み ShiroYuki_Mot 2013年6月22日 15:25 List(Of String) 追加
- 回答としてマーク shocho0101 2013年6月25日 10:36
-
一生懸命調べたのですが、やはり、難しいですね。
すみません、「調べた」ということは、「できるかもしれない」と思われた、ということですよね?どのようにしたらできるだろうと思われて、どのようなものを、どのように調べてみられたのでしょうか。
変数とは、内容を記録するためのメモリ位置を人間が記憶するためのものです。変数の内容が決まるのは、実行時です。変数の「名前」が必要なのは、コンパイル時です。「記録位置を人間がわかりやすいようにする」という目的を満足するために必要なときが「コンパイルまで」なので、コンパイル後に決まる名前を元にした記録はできない、と結論づけているので、調べてみようとも思いませんでした。
実現したいことと、質問のために用いた例が異なっていることは、よくありますね。たとえば、「仕様書の中の言葉で変数の宣言がしたい。しかし、仕様書で用いる用語がまだ決まっていないので、後で変わったときに対応したい」ということが考えられますね。
この場合は、プリプロセッサを自作したり、IDE 等のリファクタリング機能を利用することができます。Jitta@わんくま同盟
- 回答としてマーク shocho0101 2013年6月25日 10:37
-
Jitta さま ご指摘ありがとうございます。
最初の 3 行は余計ですね。 無知をひけらかしてしまいました。
お許し下さい。経緯は、以前使っていた言語が、中間コードにコンパイルする(インタープリータ)タイプのもので、変数名も置換が可能でした。
VB を使っていて、そんな必要も無く過ごしていましたが、もしやと思い調べた訳です。仰られる様に、実行時に変数値が変わる事も想定されたので、無駄な調べものかなぁという印象を持って調べていました。
質問者さんが、もし、同じ様な発想でご質問になったのなら という気持ちが、先の 3 行を書いた理由です。すみません。 ありがとうございました。
- 回答としてマーク shocho0101 2013年6月25日 10:38
-
話題が脱線気味ですが、コメントします。
eval(コードの実行時評価)のある言語では普通なことだと思います。eval "変数名" とされたら、その値を取り出せる必要がありますから。実行時に変数名でアクセスすることは、その変数が定義されているスコープを1つのハッシュ(.NETではDictionary)に見立てて、ハッシュアクセスすることと同等です。
ただし、VBには実行時に変数名でアクセスするようなことはなく、必要であればDictionaryを用意し、そこにアクセスすることになっています。(これがJittaさんの最初の回答。)
- 回答の候補に設定 ひらぽんModerator 2013年6月24日 15:30
- 回答としてマーク ひらぽんModerator 2013年7月2日 4:25