Ruby之旅(二) Ruby的基本文法以及對象的使用,方法的定義及調用,屬性的定義及使用

來源:互聯網
上載者:User

(一)Ruby中一切都是對象,包括一個常數.
比如可以用.class屬性來查看一個對象的類型,你可以看下1.class,會發現常數1的類型是Fixnum,1不過是Fixnum的一個執行個體。還可以使用-37這個Fixnum的執行個體方法abs來取得絕對值:-37.abs()會返回37
又如輸入一個1.1.class,會返回Float。

(二)Ruby文法
Ruby中的類以class開始 以end結束,類名首字母的約定是大寫。
Ruby中的方法以def開始 以end結束,方法名首字母的約定是小寫。
Ruby中的局部變數名首字母的約定是小寫。
Ruby中的建構函式名稱為initialize。
Ruby中的成員變數(執行個體變數)前置@符,在initialize裡進行聲明與初始化。
Ruby中的屬性用attr_writer和attr_reader聲明,分別對應c#的set,get,使用了attr_accessor是可讀也可寫
Ruby中的全域變數前置$符。
Ruby中的常數(常量)用大寫字母開頭,約定是全部大寫。

Ruby中任何的運算式都會傳回值,sample

class Rectangle
  def initialize(wdth, hgt)
    @width = wdth
    @height = hgt
  end
  def width=(wdth)
    @width = wdth
  end
  
end

r = Rectangle.new(2,3)
puts r.width = 5 #output 5
puts r.width # error! because the width not support read

繼續補充下attr_accessor的使用,sample


class Rectangle
  attr_accessor :width
  attr_accessor :height
  attr_accessor :width2
  attr_accessor :height2
  
  def initialize(wdth, hgt)
    @width = wdth
    @height = hgt
  end
  
  def area()
    return @width * @height
  end
  
  def area2()
    return @width2 * @height2
  end
  
  
end

r = Rectangle.new(2,3)
r.width = 5 # give samename's variable value
r.height = 5 
puts r.area() #outputs is 25  

r.width2 = 6 # not samename's variable  create
r.height2 = 6 
puts r.area2() # outputs is 36

上面的代碼說明了,在使用attr_accessor的時候,會尋找是否有同名的成員變數,如果有則訪問同名成員變數,如果沒有會預設建立一個前置@的成員變數

 (三)神奇的操作符重載
Ruby支援操作符重載,而且很神奇!


class Rectangle
  attr_accessor :width
  attr_accessor :height
  
  def initialize(wdth, hgt)
    @width = wdth
    @height = hgt
  end
  
  def area()
    return @width * @height
  end
  
  def +(addRectangle)
    return self.area + addRectangle.area
  end

end

r1 = Rectangle.new(2,2)
r2 = Rectangle.new(3,3)
puts r1+r2 # operator override
puts r1+(r2)
puts r1.+(r2) # standard function calling format

神奇吧,其實把+號理解為一個函數的名字最好不過了,就像最後一個寫法,哈哈。

(四)參數的傳遞
參數的傳遞中有預設值與可變長參數兩個比較有特點的地方,其他語言有的,ruby也有。

1.參數的預設值
預設值的設定很簡單,與其他語言一樣,sample

class Rectangle
  attr_accessor :width
  attr_accessor :height
  
  def initialize(wdth = 2, hgt = 2)
    @width = wdth
    @height = hgt
  end
  
  def area()
    return @width * @height
  end

end

r1 = Rectangle.new
puts r1.area

看到了吧,使用預設值了

2.選擇性參數,可變長參數 sample

class ParamSample
  def sayHello(*names)
      puts names.class
      puts "Hello #{names.join(",")}!"
  end
  
end

ps = ParamSample.new
ps.sayHello #output Array Hello !
ps.sayHello("lee","snake") #output Array Hello lee,snake!

可以看出,可變長參數首碼*號,可變長參數的實質是一個Array,呵呵。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.