作者hateexam ()
看板AndroidDev
標題[問題] 如何做到給一個string轉成變數或涵式名稱
時間Tue Apr 26 22:36:49 2011
譬如從一個字串內容譬如叫做 "name"
如何將字串"name"轉成其實是一個變數名稱(string name="xxx")
感謝~
--
1F:推 EmptySmile:存陣列吧...我想... 04/26 21:48
2F:→ EmptySmile:然後自己建個table去對應吧~ 04/26 21:49
4F:→ hateexam:恩 由於我們無法知道一份JAVA檔 有哪些變數 04/26 21:54
5F:→ hateexam:所以無法建dictionary 但用reflection辦的到嗎 04/26 21:57
6F:推 nowar100:應該要自己寫一個Compiler 去把這東西Reflect出來 04/26 22:38
7F:→ nowar100:例如看到有一個字串叫做"name" 它就會在另一個檔案生成 04/26 22:39
8F:→ nowar100:出相對應的變數 這客製化一個小Compiler就可以做出來了 04/26 22:39
9F:→ nowar100:此屬於語言問題 04/26 22:40
10F:→ nowar100:如果是要在同一份Source可以直接寫出來這樣 不行 04/26 22:40
11F:→ hateexam:恩 可是其實在JAVA檔已經定義一個name的變數了 04/26 22:41
12F:→ nowar100:一定要對你原本的Source做一次Parse才知道到底有哪些東西 04/26 22:41
13F:→ hateexam:恩 所以沒現成的android api可以用就是了><" 04/26 22:43
14F:→ hateexam:看來蠻麻煩的 parse後還要建table... 04/26 22:44
15F:→ nowar100:嗯我不太懂 在Java已經定義一個name的變數的意思 04/26 22:46
其實故事是這樣 某份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)
{
}_
16F:→ nowar100:我覺得要往DesignPattern的方向想辦法 Reflection不是 04/26 22:47
17F:→ nowar100:語言Coding可以作到的 那是要Compiler來做的 04/26 22:47
18F:→ nowar100:或者 就真的像一樓的作法 不要把name當成變數用 04/26 22:49
19F:→ nowar100:而是當成"內容" 根據這個內容再去做什麼事這樣 04/26 22:49
20F:推 ericinttu:問原PO: 類似C的function pointer? 04/26 22:50
21F:→ hateexam:不是 C可以用define把字串變參數名稱 但java沒define功能 04/26 23:06
22F:→ hateexam:所以想有什麼方法 可以容易達到><" 04/26 23:06
23F:→ nowar100:C的define也要Compile可以作到阿 你現在不是depend on 04/26 23:07
24F:→ nowar100:傳進的參數嗎 這就要run time才行阿 怎麼define 04/26 23:08
25F:→ nowar100:我覺得你這情況 建個Map就好啦 04/26 23:09
26F:→ nowar100:name名稱字串當key 數字當value 去查詢Map就好了吧 04/26 23:10
27F:→ hateexam:define可以用#define funx(value) fun(#value) 04/26 23:12
28F:→ hateexam:把字串代換為變數 04/26 23:12
29F:推 ericinttu:原PO是不是覺得建table麻煩了點? 至少這是條easy way啊 04/26 23:13
30F:→ hateexam:問題是JAVA檔的變數我們並沒有完全知道有哪些 04/26 23:13
31F:→ hateexam:可能有多個JAVA檔 其實在JAVA檔中還有在CALL其他java檔 04/26 23:15
32F:→ hateexam:所以無法歸納所有JAVA變數 04/26 23:15
33F:→ nowar100:那要不要改設計 04/26 23:34
34F:→ nowar100:就是別人要用的話 要先來你的class註冊這個變數 這樣你 04/26 23:34
35F:→ nowar100:就可以知道自己要用到哪些變數 也就可以建map了 04/26 23:34
36F:→ hateexam:應該是說c++曾主動要用的 java端是被動 04/26 23:40
37F:→ nowar100:我作個結論 如果要你說得可以作到動態String XXX; 04/26 23:42
38F:→ nowar100:C, C++, Java 都是作不到的 04/26 23:42
39F:→ hateexam:有哪些變數 再做table... 04/26 23:42
40F:→ nowar100:你說得#define也只是取出傳的字串值 不能動態產生變數 04/26 23:42
41F:→ ericinttu:同上 04/26 23:44
42F:→ hateexam:c define能換替換成變數 比方說上的例子 在C CODE 04/26 23:44
43F:→ hateexam:這行 funx("name")喚替換成fun(name) 04/26 23:45
44F:→ nowar100:我說得意思是 你原文的第二行 是不能用#define做到的 04/27 00:37
45F:→ nowar100:而且#define成 #value 只會讓原來的value變成字串 04/27 00:39
46F:→ nowar100:不會變成一個int阿 04/27 00:39
47F:→ hateexam:如果萱高int name=0 name就是一個整數變數啊~~" 04/27 00:40
48F:→ hateexam: 宣告Orz 好多錯字 抱歉 04/27 00:41
※ 編輯: hateexam 來自: 124.8.150.180 (04/28 01:21)