程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> ruby簡單的基礎 3

ruby簡單的基礎 3

編輯:C++入門知識


Ruby中一切都是對象,包括一個常數.
比如可以用.class屬性來查看一個對象的類型,你可以看下1.class,會發現常數1的類型是Fixnum,1不過是Fixnum的一個實例。


Ruby中的類以class開始 以end結束,類名首字母的約定是大寫。
Ruby中的方法以def開始 以end結束,方法名首字母的約定是小寫。
Ruby中的局部變量名首字母的約定是小寫。
Ruby中的構造函數名稱為initialize。
Ruby中的成員變量(實例變量)前導@符,在initialize裡進行聲明與初始化。
Ruby中的屬性用attr, attr_reader, attr_writer, attr_accessor。
Ruby中的全局變量前導$符。
Ruby中的常數(常量)用大寫字母開頭,約定是全部大寫。


initalize方法



當Ruby創建一個新對象時,它總是會尋找一個名為 initialize 的方法並執行它.因此,我們可以簡單通過一個initialize方法向實變量中加入缺省值。


class Person


  def initialize()
    puts "hello!"
  end


 # def initialize  #()省略一樣
 # 		puts "hello!"
 # end


 #參數默認值
 # def initialize (param = "1900lab") # 參數帶有默認值
 # 		puts "hello! " + param
 # end


 #可變長參數
  def youInput(*names)
      puts "input #{names.join(",")}!"
  end
end


p = Person.new()
和 p = Person.new 一樣,沒有參數()可以省略。




屬性

目的是快速生成讀寫方法


attr :attr1, key
attr_reader :attr1, :attr2
attr_writer :attr1, :attr2
attr_accessor :attr1, :attr2


attr 一般後跟一個符號參數, 第二個參數是一個 bool 參數,用於指示是否為符號參數產生寫方法。它的默認值是 false,只產生讀方法,不產生寫方法。
attr_reader 一般後跟一個符號參數,定義一個或多個只讀的屬性,用於指示為符號參數產生讀方法。
attr_writer 一般後跟一個符號參數,定義一個或多個只寫的屬性,用於指示為符號參數產生寫方法。
attr_accessor 一般後跟一個符號參數,定義一個或多個可讀寫的屬性,用於指示為符號參數產生讀寫方法。


為什麼要用 符號
我們可能會有疑問,為什麼 attr 後面要用符號呢(冒號:+ 變量)?


其實我們不用符號也可以的
class Person


  attr "name",true


end


p = Person.new()
p.name = "xiao ming"
puts p.name




我們需要知道

符號是不可改變的字符串,也不可被GC的
在大多數情況下,接受符號作為參數的方法也能接受字符串,反過來不成立;
每個符號在對象空間中只出現一次,用符號要比用字符串省內存


為什麼Ruby runtime可以保證每一個symbol唯一?

這是因為Ruby把symbol存放在運行時維護的一個符號表裡了,而這個符號表實際上是一個atom數據結構,其中存儲著當前所有的程序級的name,確保不出現內容相同的多個對象。幾乎每一個語言和系統都會有這樣一個符號表,只不過象C/C++那樣的語言,這個符號表只是在編譯時存在,運行時就沒了。而Python、Ruby則在運行時也保留這張表備用。


為什麼用符號

只所以用符號不用字符串,我想主要是內存和效率這兩個方面吧。
Ruby中兩個內容相同的字符串文本量實際上是兩個不同的對象。
a = "hello"
b = "hello"
雖然倆字符串內容都一樣,但是你比一下a和b,就知道a.object_id != b.object_id,它們指向的不是同一個對象。
如果用字符串的話,p.name = "xiaoming" 和 p.name = "小紅" 就可能占用2倍的內存。
效率方面可能就是為了避免多次動態生成字符串吧。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved