[英]What are Ruby globals useful for?
為什么Ruby有像$$
這樣的全局變量?
通過在Kernel
定義訪問器和屬性,無法獲得類似的行為嗎?
這是為了防止在子類中覆蓋嗎?
這個問題有多個部分,因此有答案。
Q1。
為什么Ruby有像$$這樣的全局變量?
Ruby從Perl和LISP借用。 兩者都有全局變量。
Ruby繼承了Perl的理念,即有多種方法可以做同樣的事情。 Yukihiro Matsumoto - 2003年9月29日
Q2。
通過在內核中定義訪問器和屬性,無法獲得類似的行為嗎?
是的,他們一直都是。 然而,可以認為存在具有全局適用性的編程值,因此應該具有全局范圍而不引入任何中間代碼。
雖然將這些封裝在類方法中可能更為OO,然后問題變得對用戶,簡單或風格更重要。 傳遞給虛擬機的腳本文件的名稱是不變的。 和命令行參數一樣。 通過方法抽象對這些值的訪問獲得的好處很少。 全局變量就足夠了,並且盡可能輕量化。
Q3。
這是為了防止在子類中覆蓋嗎?
我不知道答案。
最后,我們來看標題中提出的問題:
Ruby全局變量對什么有用?
可以通過trace_var
內核方法跟蹤Ruby中的變量賦值:
trace_var :$_, proc {|v| puts "$_ is now '#{v}'" }
$_ = "hello"
$_ = ' there'
輸出到STDOUT:
$_ is now 'hello'
$_ is now ' there'
可以設想一個應用程序對名為$ state的變量進行一些事件驅動的更改,例如GUI或傳感器提要,其中簡單地跟蹤對全局變量的更改消除了對實現基本相同功能的程序代碼的需要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.