Ruby術語集

發表于:2007-07-04來源:作者:點擊數: 標簽:
AAWK 由Alfred Aho(A)、Peter Weinberger(W)和Brian Kernighan(K)共通創建的一種小型腳本語言。 Bblade ml archive (blade/ ruby ) CCoerce 進行數據類型變換的方法。如果某數值計算方法從參數那里獲得了一個類型不明的實例時, 它會調用coerce方法來進行數據
A AWK

由Alfred Aho(A)、Peter Weinberger(W)和Brian Kernighan(K)共通創建的一種小型腳本語言。

B blade

ml archive (blade/ruby)

C Coerce

進行數據類型變換的方法。如果某數值計算方法從參數那里獲得了一個類型不明的實例時, 它會調用coerce方法來進行數據類型變換。coerce方法會返回參數中的數值和本身。

Ruby庫的數值類型變換順序為

Fixnum -> Bignum -> Rational -> Float -> Complex D Data

該類可將C中的指針處理成Ruby對象。由C指針、mark函數和free函數構成。如果您想使用C語言來擴充Ruby的功能的話, 就必須掌握該類的使用方法。相反地, 如果您沒有這個打算的話, 它也就沒什么用了。

defined?

該操作符可以檢查某對象(表達式)是否已經被定義。若未被定義就返回nil,若已被定義,就以字符串形式返回它的種類。雖然defined?看似一個方法,實際上它是Ruby語法中的操作符, 它不會對參數進行計算。因此下面的表達式

defined? print("abc\n")

不會輸出任何內容。

E Eiffel

面向對象的編程語言。據說,早先matz在讀了該語言作者所撰寫的《Object-oriented Software Construction》之后頓覺恍然大悟。但奇怪的是Ruby與Eiffel卻并不相似。如果硬要找出雷同之處的話, 可能只有兩點: 1.Ruby的塊以end結尾;2.Ruby也有rescue這個保留字。

end

該保留字表明了塊的結束。據統計,大約有33%的人在看到這個end時會聯想起Pascal(純屬杜撰)。但它并不和begin連用,因此它可能更接近于Ada或Eiffel。

Ruby之所以不使用C和Perl中的{},主要是因為以下原因

避開單句·復句的問題

例如在C語言中, 若想向下例中添加語句時

if (a==b) c();

如果寫成這樣的話

if (a==b) c(); d();

就會造成難以發現的bug。即使是Pascal也存在這個問題。

回避else的問題

與上例類似, 如果寫出下面這樣的語句的話

if (a==b) if (c==d) foo(); else bar();

就會引起混亂。其實它的本意應該是

if (a==b) { if (c==d) foo(); else bar(); }

這個樣子。

提高可讀性

可能您對此持有異議, 但有的人認為:用end來結束塊的做法可以提高程序的可讀性。

begin和case語法表達上的問題

說句實話,matz曾多次想把end用作變量。甚至探討過在ruby語法中添加{ }的問題,但因為無法完美地解決begin和case的語法表達的問題,最終不得不放棄這個念頭??峙逻@才是最大的理由吧。

ENV

該對象的運作方式與訪問環境變量的Hash相同。實際上,它就是添加了特殊方法的Object類的實例。使用該對象來修改環境變量后,其變化將會影響到Ruby的子進程。

F FAQ Frequently Asked Questions

常見的問題和解答。Ruby FAQ尚處于不斷完善的階段,問題和解答是隨時更新的。

G goto

Ruby中沒有該語句。這并不是因為“我們覺得不應該使用”goto,而是“實現其功能實在是太麻煩了”。實際上,您可以使用catch/throw或異常來實現goto的功能。

H I J JARH Just another Ruby hacker, K L M main

頂層中的self。因為self是必不可少的,所以它只是表明在頂層中有個Object類的實例--self而已。另外為了操作Object類,還特別定義了若干特殊方法。

已定義的特殊方法

private public include matz

Ruby的作者,也叫松本 行弘。請參考<URL:http://www.st.rim.or.jp/~fuku/cmail/>,另外,他還是3個孩子的父親。

Mix-in 混合插入、糅合

就像在冰淇淋中混合多種配料可以做成美味的混合冰淇淋一樣,在類中混合插入各種模塊就可以添加相應的功能。請參考繼承。

matz堅信濫用多重繼承會導致繼承關系的混亂,因此Ruby中不允許使用多重繼承。同時為充分發揮繼承功能的優勢,Ruby支持兩種繼承關系:1.使用is-a語句的繼承;2.使用Mix-in來共享并繼承模塊中的功能。

N O P Perl

不必多說了罷

POLS

Principle of least surprise

Python

Ruby的勁敵。其功力深厚,可謂“千年蛇妖”。但matz認為Python的功能仍不完美,不然就不會創造Ruby了。最要命的是Python限定了名稱長度(6個字符)。

Q R RAA

Ruby Application Archive(RAA)

RCR

Ruby Change Request

RD

Ruby Document

Ruby

面向對象的腳本語言。Ruby的意思是“緊跟在Perl(pearl是6月的誕生石,Ruby則是7月的誕生石)之后”。Ruby并不是其他單詞的縮寫。

S Sather

面向對象的編程語言。其實matz鐘愛Sather勝過Eiffel。但Ruby與Sather一點都不像。

self

表示被調的表達式。那為什么把它叫做self呢?因為如果把方法看作動詞的話,那么被調就是該動作的主語,從方法的角度來看,被調當然就是自己了。一般人認為,Ruby對此并未深究,只不過是模仿Smalltalk的做法罷了。

Smalltalk

面向對象的編程語言。它奠定了現代面向對象 理論體系的基礎。

super

在重定義的方法中調用上級方法。省略參數時,將使用主調方方法的參數來進行調用。

問題:

修改參數中給出的數值后再調用super的話,將會使用原來的值還是修改后的值呢?

def foo(a) print a end def self.foo(a) a=25 super end foo(5) # 5 or 25??

答案:

使用修改后的值(25)

T Thread

原為Thread of control的縮略語,意指一系列的控制流。在Ruby中,一個程序內可以同時存在若干線程。

U undef

將方法設置為未定義狀態。繼承 和Mix-in的功能都是在類中添加方法,而undef則可以取消方法。但是,如果取消了類所必需的方法(被其他方法所調用的方法)的話,其后果不堪設想。

V W X Y Z
--按拼音排序 A B 被調 Receiver

方法的執行主體。也就是方法調用表達式的`.'中的左邊部分。在方法內,可以使用self來表示它。另外,您可以使用@變量名的形式來訪問被調的實例變量。

變量 Variable

貼在對象上的標簽。Ruby的變量包括全局變量、局部變量和實例變量。因為常數的值不能改變,所以不是變量。但它也是一種標簽,因此在這一點上它與變量是相同的。

C 常數 Constant

一旦定義了就不能再改變的變量。這個定義本身似乎就有點矛盾。

重定義 Override

即指再定義。重新定義超類或include模塊中已經定義的方法。使用super即可調用原來的方法。

抽象數據類型 Abstract Data Type

將數據構造和對其進行操作的過程封裝在一起,就形成了抽象數據類型。對抽象數據進行操作時,必須使用封裝內的操作才行。其結果是不能從外部直接使用數據構造,同時一旦內部構造發生變化也不會對外界造成不良影響。我們把這個過程叫做封裝。

初始化 Initialize

使對象(或“某事物”)變為“就緒”狀態。對實例進行初始化操作時,需要重定義Object#initialize方法。類方法Class#new的默認定義就是對新生成的實例執行initialize方法。傳給new的參數會被原封不動地傳給initialize。另外,若帶塊調用時,該塊會被傳給initialize。

因此,不必對Class#new進行重定義。

辭典 Dictionary

根據給出的條目即可查出對應的定義。它是哈希表的別名。面向對象的始作俑者Smalltalk把類似哈希表的數據構造稱作“辭典”,所以時至今日仍然有一些人把哈希表稱作辭典。

D 大Endian Big Endian

美洲大陸的原住民是Indian而并非Endian,那么這個Endian的詞源是什么呢?其實它出自Jonathan Swift寫的《格列佛游記》。這本書中的人們因為吃雞蛋的方法不同而分成兩類,從圓頭開始吃的叫大Endian,從尖頭開始吃的叫小Endian。在計算機業界,該詞表示CPU等排列數據的一種方式,據說網絡一族的人們喜歡大Endian。請參考字節順序。

大規模退出 Non-Local Exit

它并不是那種發生在break, next, redo, retry, return等方法的范圍內的普通退出,而是一種跨度極大的退出。只要沒被捕捉到,它甚至會跳出方法調用的牢籠來引發中斷。Ruby的大規模退出包括由異常引起的退出和catch/throw。

大多數的異常(包括由exit所引發的SystemExit在內)都會被rescue 捕捉到。但是若該異常不值得捕捉(例:內存分配失?。忉屍鞯腷ug)的話,就會放他一馬。

在catch/throw中,通常會從被throw的地方起一直跳轉到與throw部分具有相同標簽的catch部分為止。

迭代器 Iterator

即指調用帶塊方法。當初為了進行迭代操作而設置了帶塊方法,現在它仍然常被稱作迭帶器。雖然可以將那些進行迭代操作的方法叫做迭代器,但如果將所有帶塊方法的調用過程都看作迭帶器的話,勢必會引起混亂。

調用帶塊方法

我們把那些可接受代碼段(塊)的方法叫做帶塊方法。調用帶塊方法就是指調用這些帶塊方法的過程。

在帶塊方法中使用yield就可以執行塊的內容。

當然了,如何處理給出的塊,這完全取決于方法。所以,如果硬是把塊傳給一個不能帶塊的方法的話,也不會有什么結果,而且也不會發生錯誤。

動態綁定 Dynamic Binding

指在運行時根據操作對象的數據類型的不同來選擇合適的過程(方法)。它可以提高程序的靈活性。它是面向對象的必要條件之一。在Ruby中變量是沒有類型的,因此必然可以進行動態綁定。

動態局部變量 Dynamic Local Variable

它是一種特殊的局部變量。Ruby的局部變量的作用域是固定的,因此在編譯時就會生成局部變量。動態局部變量則有所不同,每次執行時才會生成變量。在塊中首次被賦值的局部變量就是動態局部變量,其作用域僅限于塊的內部。這主要是為了讓各個Thread都能擁有自己獨立的變量而設的。

對象 Object

即指物體。舉個例子,“愛”可能不是對象,但“情書”卻是對象。甄別某事物是否屬于對象,這可能是個哲學問題?;蛟S正因為如此,面向對象也變得撲朔迷離起來。在計算機業界有人認為對象就是指內存中的特定空間。到底何謂對象,還真是個難題。另外,請參考封裝和抽象數據類型。

多態 多態, Polymorphism

根據對象的不同選擇合適的操作。在Ruby中的實現方法是,根據被調的對象的不同來選擇不同的方法。

obj = "abc" print obj.length, "\n" # => 3 obj = [1,2,3,4] print obj.length, "\n" # => 4 F 方法 Method

對對象進行的操作。操作對象(被調)以self來表示。在Ruby中,除去內部類的對象以外,通常對象的構造都是動態確定的。某對象的性質由其內部定義的方法所決定。

封裝 Encapsulation

將內部結構和算法隱藏起來,以確保只有特定的過程(也叫方法)才能直接操作數據,這種隔離方法就叫做封裝。請參考抽象數據類型。

在Ruby中,只有方法可以操作實例變量,因此可以說Ruby中的封裝是強制性的。

G 關聯數組 Associative Array

哈希表的別名。因為哈希表可以使用任意的鍵來引出值,這就是“關聯”特性。另外,可以將哈希表看作是使用非數字形式索引的數組,這是它的“數組”特性,因此它也叫做“關聯數組”。以前是使用硬件來實現關聯數組(也叫關聯記憶)的功能的,但是隨著計算速度的攀升以及關鍵算法(叫做“哈希表”,它是現在的哈希表的詞源)的成功研發,現在只用軟件就可以實現其功能了。

H 哈希表 Hash

Ruby中的一種從鍵到值的映像(mapping)。也叫做關聯數組或辭典。哈希表之所以得此名,是因為在實現其功能時使用了一種叫做“哈希表”的算法。哈希的意思是“切碎”,是“hashed beef”中的“hash”。

函數 Function

嚴格地講,Ruby中沒有函數。但那些省略被調的方法調用看來確實很像函數,而且有的方法根本不需要self或實例變量等被調信息,事實上后者已成為函數了。所以有時也就網開一面地把這樣的方法叫成函數了。

通常將這種函數(式的方法)的方法可視性設成了private,這樣就只能以省略被調的形式來調用它們了。這類方法中比較有代表性的是 模塊函數。

環境變量 Environment Variable

父進程傳給子進程的值。使用ENV就可以訪問環境變量。傳給子進程只是環境變量的副本,因此子進程無法通過環境變量來向父進程傳遞信息。這就好比老子不會聽小孩的話一樣。

J 繼承 Inheritance

主要依賴于從祖先或親戚那里繼承的功能,而自己只做一些補充性的工作。在現實世界中,這種行為是要遭到唾棄的,但在計算機世界里這卻是個很經濟的做法。繼承也可以指在某類中添加新功能后生成一個新的類。繼承可以用is-a的關系來加以詮釋。例如,如果您要生成一個“理科學生”類的話,需要首先繼承描述一般學生特征的“學生”類,然后再添加“整天忙于應付實驗”等特征后即可生成該類。若不存在is-a關系,而只想共享某些特性或功能時,我們推薦您使用Mix-in。

腳本 Script

腳本,特指由解釋器進行處理的較短的程序。當然了,其中也不乏大作。

腳本語言 Script Language

腳本語言。

局部變量 Local Variable

只能在特定范圍內使用的變量。該范圍就是作用域。Ruby的作用域包括

程序整體 類·模塊定義 方法定義 塊

幾種。只有塊能訪問外側作用域的局部變量。局部變量的作用域 從該變量首次被賦值的位置起 直到該賦值位置所在的作用域結束為止。這個優先范圍是靜態決定的,與具體的運行情況無關。

K 塊 Block

可用來構成循環或打家劫舍。

L 類方法 Class Method

就是類的方法??煞譃閮煞N:第一種是在所有的類的超類Class中定義的,且被所有的類所共享的方法;第二種是各個類所特有的特殊方法。這倒沒什么問題。重要的是類方法中的self指的是類本身,這點需要牢記。

立即值 Immediate Value

實際的數值就保存在變量之中,這和引用是不同的。目前,Ruby中只有Fixnum、Symbol和nil/true/false是立即值。然而Ruby的某些版本并未將Fixnum算做立即值,這也無關緊要。在理論模型層面上,可以將所有的值都看作是對某對象的引用。

理論體系 Paradigm

類似于“思維方式”,這個詞很難說得清楚。

M 面向對象

以對象為中心的理論體系。英語中的"Object-Oriented"是個形容詞,可是到了日語中就變成名詞了。似乎只要將對象置于思考的中心點就萬事大吉了,但也要兼顧一下幾點

繼承 封裝

多態

(或者動態綁定)

有人甚至把它看作是包治百病的“魔法”,但事實上世界并非如此簡單。面對對象概念誕生至今已逾20個年頭,它已經磨礪成為一把實用的利劍。

面向對象設計 Object-Oriented Design

以對象作為出發點的系統設計

面向對象編程 Object-Oriented Programming

以對象作為編程的中心。

面向對象分析 Object-Oriented Analysis

以對象為根本的系統分析。

模塊函數 Module Function

在那些函數式的方法中,模塊函數既可用作模塊的方法,又可用作特殊方法。例如Math模塊中的大部分方法都是模塊函數。您既可以這樣

Math.sqrt(2)

又可以這樣

include Math sqrt(2)

來使用它們。

N 內部類 Built-In Class

這些內部類被嵌入Ruby解釋器內部,其實例的結構與普通對象有所不同。我們不建議您繼承內部類。Ruby的內部類如下所示(實際上遠不止這些,更多詳情請參考內部類/模塊/異常類)

Array Bignum Class Data FalseClass File Fixnum Float Hash IO MatchData Module NilClass Proc Regexp String Struct Thread TrueClass P 排序 Sort

將對象依次排列。只要元素是可數的(include了Enumerable)、且已定義了順序(定義了<=>)的話,Ruby就可以對這些元素的集合進行排序。這并不僅限于數組,也適用于其他復雜對象的集合。

破壞性的 Destructive

因為String#chop!, Array#concat這種方法會直接改變被調的狀態,因而會產生“破環性的作用”。不過您不必擔心,因為它們不會損壞您的計算機。

Q 全局變量 Global Variable

在程序的各個角落中都可以使用的變量。比較危險,少用為佳。

R S 實例 Instance

即指對象。在強調對象歸屬于某類時,常使用實例這個詞。據說有好多人因為不了解對象和實例的關系,因而搞不懂面對對象到底是怎么一回事兒。

實例變量 Instance Variable

對象所特有的變量。Ruby實例變量名前都有一個@符號,您只能在方法內部使用它。

T 特殊方法 Singleton Method

專屬于某特定對象的方法。請參考方法。在下列情況下,其他對象也可以繼承該特殊方法。

Kernel#clone時 定義了子類時

若在特殊方法中重定義了原先類中的方法時,可以使用super來調用原來的方法。

特殊類 Singleton Class

只對應于某特定對象的假想類。

W 文檔 Document

matz最頭疼的就是寫文檔了。他平時總是說“源代碼就是文檔。連bug也寫得清清楚楚”,當然了誰都不以為然。

X 小Endian Little Endian

開始有10個人,后來越來越少。在計算機業界中,它是表示一種排列數據的形式。據說有一家大的CPU制造商很喜歡小Endian。請參考字節順序。

Y 異常 Exception

遇到非正常情況就會引發異常。發生異常時,只要沒使用begin中的rescue進行捕捉的話,它將跨越方法調用的阻攔,進而中斷程序(thread)的運行。有了異常處理功能之后,我們就不必再逐一檢查Ruby程序中的每個異常情況了。發生異常的地點信息被保存在$@中,而異常本身的信息被保存在$!中。

Z 再定義 Redefinition

即指重定義。

字節順序 Byte Order

將0x01020304這4個字節數據按照1,2,3,4或是4,3,2,1的順序排列。前者叫做大Endian,而后者叫做小Endian。人們一直在爭論哪種方法更好,但至今尚無定論。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97