ruby注意點

來源:互聯網
上載者:User

標籤:

1、強型別,即不會自動進行類型轉換,而C/C++為弱類型。

# Rubyi = 1puts "Value is " + i# TypeError: can‘t convert Fixnum into String#   from (irb):2:in `+‘#   from (irb):2
2、完全地OO(Object-Oriented物件導向),所有方法都是對對象,無全域函數。
strlen(“test”)   # error
“test”.length
3、變數:以小寫開頭。 my_composer = ‘Beethoven’
4、類型轉換: puts 2.to_s + ‘5’ #25
5、常量:以大寫開頭。 Foo = 1
6、空值nil。 
7、字串符號symbols,相同符號不會重複建立對象。 puts :foobar.object_id
8、隊列Array。 
a = [1, ‘cat’, 3.14 ] 
puts a.inspect # 輸出 [1, ‘cat’, 3.14]
# inspect將對象轉換成適合閱讀的字串
# 讀取沒有設定的元素,則值為nil
a = [‘Ruby’, ‘Python’]
a.each do |ele|
  puts ‘I love ’ + ele + ‘!’
end
# I love Ruby!
# I love Python!
9、Hash類似C++的map和python的Dict,使用Key-Value結構。通常使用Symbol當作Key:
config = { :foo => 123, :bar => 456 }
config = { for: 123, bar:456 } # 和上面等價,Ruby 1.9新文法
puts config[:foo]  #123
puts config[“nothing”]  #nil
10、else if寫成elsif:
total = 26000if total > 100000  puts "large account"elsif total > 25000  puts "medium account"else  puts "small account"end
puts “greater than ten” if total > 10 # 適合執行的if語句只有一行的情況
11、Case結構,case when:
case name  when "John"    puts "Howdy John!"  when "Ryan"    puts "Whatz up Ryan!"  else    puts "Hi #{name}!"end
12、while,until,loop,next,break和C++文法不同,不過很少用,實際用迭代器。
13、Regex:
# 找出手機號碼phone = "123-456-7890"if phone =~ /(\d{3})-(\d{3})-(\d{4})/  ext  = $1  city = $2  num  = $3end
14、?與!的慣用法:方法名稱用?標識返回Boolean值,用!標識有副作用,如array.sort!
15、自訂類型:
class Person # 大寫開頭的常數
 puts “running when class loaded” # 載入該類型時執行,主要用來做Meta-programming
 @@sname = ‘Class var’# 類變數
  def initialize(name) # 構建函數    @name = name       # 物件變數  end  def say(word)    puts "#{word}, #{@name}" # 字串相加  endendp1 = Person.new("ihower")p2 = Person.new("ihover")
16、類繼承,使用<符號。
17、Module和Class類似,但是不能用new來建立,其用途一是可以當作Namespace,更重要的功能是Mixins,將一個Module混入類型中,這樣這個類型就擁有了此Module的方法,多重繼承的問題也通過Module來解決。

首先是debug.rb

module Debug  def who_am_i?    puts "#{self.class.name}: #{self.inspect}"  endend

然後是foobar.rb

require "./debug"class Foo  include Debug # 這個動作叫做 Mixinendclass Bar  include Debugendf = Foo.newb = Bar.newf.who_am_i? # 輸出 Foo: #<Foo:0x00000102829170>b.who_am_i? # 輸出 Bar: #<Bar:0x00000102825b88>
18、異常處理,使用rescue、ensure:
begin  puts 10 / 0 # 這會拋出 ZeroDivisionError 的異常rescue => e  puts e.class # 如果發生異常會執行 rescue 這一段ensure  # 無論有沒有發生異常,ensure 這一段都一定會執行end# 輸出 ZeroDivisionError
其它高階功能如Meta-programming暫不考慮。
參考轉載文檔:https://ihower.tw/rails4/

ruby注意點

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.