變數‎ > ‎

反向變數存取

各位有讀過三角函數 -- sin,cos,tan -- 吧,他們都是將一個角度轉成長度比例。
若果我知道了一個長度比例,想知道它的角度是什麼,就要把三角函數反轉,變成 arc-sin, arc-cos, arc-tan,即是反函數
而變數就是一組文字(變數名稱)轉成它的賦值(變數內容),那麼,若果我知道了一個賦值,怎麼取回它的名稱呢?且看下文。

在三角函數中,姑且拿sin作比喻吧
如果sin(a)=b
我們就知arcsin(b)=a

現在我們看看就以怎應用在變數上吧
這兒有堆變數,他們的名稱都是用英文的數字,賦值是對應數字,即是這樣
one=1
two=2
three=3
etc...

如果我們知道一個賦值,怎樣反存取他們的變數名稱呢?
我們不妨直接搬來上面的數學槪念
arc1='one'        //''中的是字串
arc2='two'
arc3='three'
etc...

現在我們就可以這樣反向存取變數了
arc{數值}

如果數值是3,我們便會得出'three';2就會輸出'two'


那這招有啥用的呢?

這可以拿來弄玩家陣列
如果編輯群去玩遊戲
p1=LC.FK;p2=LC.AsshoIe;p3=LC.egg;p4=LC.dragon
作者不想用{p}.xxx的格式(物件)去儲存他們的資料,想用 xxx.{n}去存 (n是玩家編號 1~4,這種格式叫陣列)
他要怎樣在知道玩家代碼(LC.xxx)下得到玩家編號,n(1至4)這個值呢
他要先定義LC.xxx.playerno=n,再把他所知道的玩家代碼套進去:
{p1}.playerno=1
{p2}.playerno=2
{p3}.playerno=3

之後我們設 p=LC.xxx    //unknown player id
.'.n={p}.playerno

這還可以拿來弄地圖
let location=x,y
arc.{location}='location'    //arc.x,y='location'