ruby 學習精簡筆記

來源:互聯網
上載者:User

============================================================================
1、控制器中的方法可以相互調用嗎
2、控制方法中定義的@變數是不是執行個體變數,它貌似只能在控制器方法對應的view中應用,不能被其他view使用
3、text_field等的傳值方式,表單的傳值方式
4、activeRecord的關係映射
============================================================================
ruby中的代碼每個語句放在單獨的行數,不需要在每個句子的末尾加上分號
ruby的變數不需要預先聲明,可以在使用的時候直接賦值,根據賦值的類型確定變數類型
ruby字串中含有運算式或者變數用#{運算式},如果是全域變數或執行個體變數則可以不用花括弧

 

$greeting="helllo"
@name="prudence"
puts "#$greeting,#@name"
方法以def...end的形式表示
ruby方法所返回的值,是最後一個被求值的運算式的值,可以省略return.
ruby使用一種命名慣例來區分名稱的用途:名稱的第一個字元顯示這個名稱如何使用,
局部變數、方法參數和方法名稱都必須使用小寫或者底線,全域變數都用貨幣符號($)為首碼;
而實力變數以at(@)符號開始,類變數則以兩個@符號開始。最後,類名稱、模組名稱和常量都必須一個大寫的字母開始。
名稱可以是字母、數字、底線的任意組合,但是在@符號之後的不能是數字。按慣例,包含多個單詞的執行個體變數名稱在詞與詞
之間用底線,包含多個單詞的類變數名稱用混合大小寫。方法名稱可以以?、!、=字元結束。
數組:a=[1,2,3] a[0]=1,
      a=%wi am ok a[0]="i" a[1]="am" a[2]="ok"        
散列表:a={"1"=>1,"2"=>2,"3"=>3} a["1"]

控制語句:如果只是簡單的if或者while控制語句,例如只有一句,則可以先寫出表達,然後再寫if或者while
如:puts "ok" if 3>2

ruby 的一個特性:block和迭代器
block是一個代碼塊可以和方法相關聯,幾乎和參數一樣
block只是在花括弧和do...end之間的一組代碼。
{puts "hello"} #this is a block
或者
do
   puts "hello"
end
慣例多行用do...end,單行用{},一旦建立了block,就可以和方法相關聯。吧block得到開始放在含有方法調用的源碼的結尾處,就可以實現
和方法的關聯。比如下面的代碼:
greet{puts 'hi'}
如果方法有參數:
greet("jim"){puts 'hi'}
使用ruby的yield語句,方法可以一次或者多次地調用相關聯的block,可以把block想象或者比作方法調用,它調用yield語句的方法所關聯的block.

def call_block
puts "starts of method"
yield
yield
puts "end of method"
end

call_block {puts "in the block"}
結果:
starts of method
in the block
in the block
end of method

看到了吧,block中的代碼隨著yield的出現而得到調用。當然,我們還可以給yield提供參數,參數會傳遞到block中。在block中,豎線|之間給出參數名來接受這些來自yield的參數.
def call_block
  yield("hello",99)
end
call_block{|str,num| ...}

ruby庫中使用大量的block來實現迭代器,迭代器是從某種(collection)如數組中返回元素的方法
animals=%w(ant bee cat dog elk)
animals.each {|e| puts e}
看了上面block和yield的使用不難推理出each實際上是這樣的一個方法:
def each
   for each element #虛擬碼
   yield(element)
   end
end

5.times{puts "*"}
1.upto(6){|i| puts i.to_s}

定義方法:
def ...end
ruby可以讓你指定方法參數的預設值-如果調用者在傳入參數時沒有明確的

ruby可以讓你指定方法的參數的預設值---如果調用者在傳入參數時候沒有明確指定所用的值,為此你可以使用複製操作符:
def cool_dude(arg1="Miles",arg2="Coltrane",arg3="Roach")
  "#{ag1},#{ag2},#{ag3}."
end
cool_dude
cool_dude("Bart")->Miles,Coltrane,Roach
cool_dude("Bart","Elwood")->Bart,Coltrane,Roach
cool_dude("Bart","Elwood","Linus")->Bart,Elwood,Linus
可變長度的參數列表
def varags(arg1,*rest)
  "Got #{arg1} and #{rest.join(',')}"
end
varags("one")->got one and two
varags("one","two","three")->got one and two,three

如果方法的最後一個參數是&,那麼所關聯的block會轉換成一個Proc對象,然後賦值給這個參數。

class TaxCalculator
 def initialize(name,&block)
   @name,@block=name,block
 end
 def get_tax(amount)
  "#@name on #{amount}=#{@block.call(amount)}"
 end
end

tc=TaxCalculator.new("Sales tax"){|amt| amt*0.75}
tc.get_tax(100)   #->Sales tax on 100=7.5
tc.get_tax(250)   #->Sales tax on 250=18.75

方法可以返回多個值,返回多個值則是以數組的形式組織的
def meth_three
 100.times do |num|
  square=num*num
  return num,square if square>1000
  end
end
meth_three ->[32,1024]
num,square=meth_three ->num=32,square=1024

聯繫我們

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