乙個有趣的問題 如何獲取引用名

2021-08-22 17:44:28 字數 886 閱讀 6770

我們知道, 對於

a = 100

這樣的一條語句, a是乙個指向 "100" 這個物件的引用. 那麼, 如何根據a得到它的名字"a"或者符號:a ?

我現在實現了乙個'swap'函式,它的作用是交換兩個變數的值, 由於ruby沒有類似c的'指標',所以這個swap實現起來還真有點麻煩:

a = 100

b = 200

def swap(x, y, &block)

bind = block.binding

vx = eval("lambda }", bind).call

vy = eval("lambda }", bind).call

eval("lambda = v }", bind).call(vx)

eval("lambda = v }", bind).call(vy)

endputs "a = #, b = #"

swap(:a, :b){}

puts "a = #, b = #"

好了, 這個swap有兩個缺陷:

1) 為了獲取caller's binding, 需要帶乙個空的閉包. 不過這個問題好解決, rails中有binding.of_caller的實現,用它就可以省去那個空閉包.

2) 為了獲取待交換的變數名, 傳入swap的引數不能是a,b本身,而需要對應的symbol或string, 看起來有點彆扭. 如果存在乙個函式get_ref_name(x)返回x的名字, 那麼問題就解決了.

[b]那麼, get_ref_name 存在麼? 該如何實現?[/b]

(注: 不要告訴我用a,b = b,a來實現變數交換, 這個不是要討論的問題)

引用型別(乙個有趣的問題)

public static void main string args test test tests n test.id 10 這裡沒有問題,修改test.id會導致tests i id一起更改 test tests n test null 這裡有問題,修改test null,但是 tests i...

如何獲取乙個型別引用

原著 andrew troelsen pro c 2008 and the net 3.5 platform,fourth edition system.type 類定義了一些成員,可以用來檢視某個型別的元資料,其中很多成員都返回system.reflection名字空間中的型別。例如,type.g...

乙個有趣的問題

今早朋友圈某人以100軟妹幣求助這樣乙個問題 概率論是學的一塌糊塗,但是突然想起類似用蒙特卡洛方法可以模擬出來概率。於是向著這100軟妹幣出發了。但是首先遇到了第乙個問題。陣列b的亂序排列感覺有點棘手。首先的第一反應是 迴圈隨機產生1 100的隨機數,判斷陣列中是否已經有該數,若已存在,則重新生成隨...