[問題] 如何做到給一個string轉成變數或涵式名稱

看板AndroidDev作者時間13年前 (2011/04/26 22:36), 編輯推噓5(5043)
留言48則, 4人參與, 最新討論串1/2 (看更多)
譬如從一個字串內容譬如叫做 "name" 如何將字串"name"轉成其實是一個變數名稱(string name="xxx") 感謝~ --

04/26 21:48, , 1F
存陣列吧...我想...
04/26 21:48, 1F

04/26 21:49, , 2F
然後自己建個table去對應吧~
04/26 21:49, 2F

04/26 21:51, , 3F
http://goo.gl/ukiSZ Java Dictionary
04/26 21:51, 3F

04/26 21:54, , 4F
恩 由於我們無法知道一份JAVA檔 有哪些變數
04/26 21:54, 4F

04/26 21:57, , 5F
所以無法建dictionary 但用reflection辦的到嗎
04/26 21:57, 5F

04/26 22:38, , 6F
應該要自己寫一個Compiler 去把這東西Reflect出來
04/26 22:38, 6F

04/26 22:39, , 7F
例如看到有一個字串叫做"name" 它就會在另一個檔案生成
04/26 22:39, 7F

04/26 22:39, , 8F
出相對應的變數 這客製化一個小Compiler就可以做出來了
04/26 22:39, 8F

04/26 22:40, , 9F
此屬於語言問題
04/26 22:40, 9F

04/26 22:40, , 10F
如果是要在同一份Source可以直接寫出來這樣 不行
04/26 22:40, 10F

04/26 22:41, , 11F
恩 可是其實在JAVA檔已經定義一個name的變數了
04/26 22:41, 11F

04/26 22:41, , 12F
一定要對你原本的Source做一次Parse才知道到底有哪些東西
04/26 22:41, 12F

04/26 22:43, , 13F
恩 所以沒現成的android api可以用就是了><"
04/26 22:43, 13F

04/26 22:44, , 14F
看來蠻麻煩的 parse後還要建table...
04/26 22:44, 14F

04/26 22:46, , 15F
嗯我不太懂 在Java已經定義一個name的變數的意思
04/26 22:46, 15F
其實故事是這樣 某份CPP檔會去call android層 xxx.cpp--- call_anroid("name2"); 某段cpp 涵式去mapping到android code的一個涵式 [c++]void call_anroid(string) <--->[java] void Call_Android(string) xxx.java--- int name1=1 , name2=2, name3 =3; void Call_Anroid(string s) { //這裡想把s轉成某個整數變數的名稱; //可以變成func(name2); } void func(int value) { }_

04/26 22:47, , 16F
我覺得要往DesignPattern的方向想辦法 Reflection不是
04/26 22:47, 16F

04/26 22:47, , 17F
語言Coding可以作到的 那是要Compiler來做的
04/26 22:47, 17F

04/26 22:49, , 18F
或者 就真的像一樓的作法 不要把name當成變數用
04/26 22:49, 18F

04/26 22:49, , 19F
而是當成"內容" 根據這個內容再去做什麼事這樣
04/26 22:49, 19F

04/26 22:50, , 20F
問原PO: 類似C的function pointer?
04/26 22:50, 20F

04/26 23:06, , 21F
不是 C可以用define把字串變參數名稱 但java沒define功能
04/26 23:06, 21F

04/26 23:06, , 22F
所以想有什麼方法 可以容易達到><"
04/26 23:06, 22F

04/26 23:07, , 23F
C的define也要Compile可以作到阿 你現在不是depend on
04/26 23:07, 23F

04/26 23:08, , 24F
傳進的參數嗎 這就要run time才行阿 怎麼define
04/26 23:08, 24F

04/26 23:09, , 25F
我覺得你這情況 建個Map就好啦
04/26 23:09, 25F

04/26 23:10, , 26F
name名稱字串當key 數字當value 去查詢Map就好了吧
04/26 23:10, 26F

04/26 23:12, , 27F
define可以用#define funx(value) fun(#value)
04/26 23:12, 27F

04/26 23:12, , 28F
把字串代換為變數
04/26 23:12, 28F

04/26 23:13, , 29F
原PO是不是覺得建table麻煩了點? 至少這是條easy way啊
04/26 23:13, 29F

04/26 23:13, , 30F
問題是JAVA檔的變數我們並沒有完全知道有哪些
04/26 23:13, 30F

04/26 23:15, , 31F
可能有多個JAVA檔 其實在JAVA檔中還有在CALL其他java檔
04/26 23:15, 31F

04/26 23:15, , 32F
所以無法歸納所有JAVA變數
04/26 23:15, 32F

04/26 23:34, , 33F
那要不要改設計
04/26 23:34, 33F

04/26 23:34, , 34F
就是別人要用的話 要先來你的class註冊這個變數 這樣你
04/26 23:34, 34F

04/26 23:34, , 35F
就可以知道自己要用到哪些變數 也就可以建map了
04/26 23:34, 35F

04/26 23:40, , 36F
應該是說c++曾主動要用的 java端是被動
04/26 23:40, 36F

04/26 23:42, , 37F
我作個結論 如果要你說得可以作到動態String XXX;
04/26 23:42, 37F

04/26 23:42, , 38F
C, C++, Java 都是作不到的
04/26 23:42, 38F

04/26 23:42, , 39F
有哪些變數 再做table...
04/26 23:42, 39F

04/26 23:42, , 40F
你說得#define也只是取出傳的字串值 不能動態產生變數
04/26 23:42, 40F

04/26 23:44, , 41F
同上
04/26 23:44, 41F

04/26 23:44, , 42F
c define能換替換成變數 比方說上的例子 在C CODE
04/26 23:44, 42F

04/26 23:45, , 43F
這行 funx("name")喚替換成fun(name)
04/26 23:45, 43F

04/27 00:37, , 44F
我說得意思是 你原文的第二行 是不能用#define做到的
04/27 00:37, 44F

04/27 00:39, , 45F
而且#define成 #value 只會讓原來的value變成字串
04/27 00:39, 45F

04/27 00:39, , 46F
不會變成一個int阿
04/27 00:39, 46F

04/27 00:40, , 47F
如果萱高int name=0 name就是一個整數變數啊~~"
04/27 00:40, 47F

04/27 00:41, , 48F
宣告Orz 好多錯字 抱歉
04/27 00:41, 48F
※ 編輯: hateexam 來自: 124.8.150.180 (04/28 01:21)
文章代碼(AID): #1DjjY2ul (AndroidDev)
文章代碼(AID): #1DjjY2ul (AndroidDev)