多行註解
=end
字串輸出
puts "hello!" + "Matz" << "World!"
print "hello!" + "Matz" << "World!"
printf "hello!" + "Matz" << "World!"
puts "hello","world!" #會段行
倍乘輸出
puts "hello" * 3 + "world!"
5.times{ print "hello!" } #無段行
5.times{ puts "hello!" } #有段行
附上shell指令
puts "hello!" + `ruby --version` #是用鍵盤TAB上面的重音記號
系統指令
system "echo hello"
exec "hello"//結束後離開視窗
變數宣告
hi = "HEllo!"
puts hi
字串插入已宣告的變數-表達式替換
hi = "world!"
puts "hello ,#{hi}" #將已宣告變數包在#{ }
puts "hello ,#{args[0]}" #引數也行
hi.to_sym #=> :hi #轉為符號
格式化字串
a = "hello,%s"
puts a % "world!"
"%s,%s!" % ["hello","world!"] #字串可以一起和%s放在一起!
eval 和 -e
eval "puts 'hello!'"
ruby -e "puts 'hello!'"
ruby -e "print 'hello,'" -e "puts 'world!'" //前面第一組-e 改用puts會段行
ruby -e "three = 3";puts 'matz!' * three"
取得鍵盤輸入
a = gets
puts "hello!," + a
方法的宣告
def a #如果用undef會解除此方法,或是def a(*args)可動態傳送引數的數量或是def a(&proc)即時將區塊轉為物件
puts "hello!"
end
def b(word,times) #也可指派引述預設值b(word="aaa",times = 3)
puts word * times
end
a #呼叫方法,也可用return
def cat_name = (cat) #可以將方法做指派,譬如實例變數
@cat_name = cat
end
區塊結構-重新定義方法
def a
yield #這是陳述式
end
a { puts "hello!"}
使用each列出陣列中的元素
["hello!,","world!"].each { |e| print e }
#{}是do/end的省略方式,||是區塊
#使用lambda方法並用prc轉換為物件
prc = lambda{ |name| puts "hello," + name }
myprc = proc { puts "hi" }
count = proc.new { [1,2,3].each do |i| print i end: puts}
呼叫物件
prc.call "world!"
myprc.call
count.call
攝取XML檔
#建立一個XML檔,檔名為matz.xml內容如下
#!/usr/bin/env ruby
require "rexml/document"
file = file.new("matz.xml")
doc = REXML::Document.new file
puts doc.to_s
建立類別
class a
#裡面放程式
def initialize(name)
@name = name
end
def hi
puts "hello!"
end
end
獨立成a.rb並使用
world = a.new("hello!")
world.hi
類別的繼承
class b
#略
end
class a < b #a會繼承b
略
end
多行註解
=begin
略
=end
x.kind_of? #判斷目前的型別,結尾?會回傳true或false,!會具備破壞性
x.to_f #轉型為浮點數
#區域變數用小寫字母或_為字首宣告,大寫會視為常數且值可改
$x = "0.00" #全域變數
@x = x #實例變數,只透過accessor方法
@@x = 0 #類別變數
a,b,c = "cash", 1.99, 20 #平行賦值
x = "abcdefg"
x[2..4] #從第2到第4個字0為起始
x[-5..-3] #倒數過來-1為起始
條件陳述式
c = 0
if c.zero? then
puts "c is zero!"
end
if 1 == 1 then
puts "true"
end
puts "x equals 0" if c == 0
if c ==0:puts "c equals 0" end
if pr #預設為True
if lang == :es:puts "dog"
elsif lang == :gt:puts "cat"
else puts "nothing!" #:不可接再else後面
end
#and, or,not是邏輯運算子可檢查多項! unless則判斷是否為false
三元運算子
label = length == 1 ? "true" : "false"
#如果length是1就會true反之false也
多選條件陳述式
lang = :en
dog = case lang
when :et: "dog"
when :en: "cat"
else "nothing"
end
陣列與雜湊
dd = ["hi",22,33] #宣告陣列
dd[0] #呼叫
gg = {"aa" => "aaaaa", "bb" => "bbbbb"}
gg["aa"] #會出現aaaaa
num = array(0..9)#創造1~9的陣列
s = %w[how are you]#字串陣列
last[-1]#取得最後一個陣列元素
陣列集合運算
陣列 & 陣列
&交集
-差集
|聯集
例外處理
begin
rescue
ensure
迴圈
while i < 2
end
begin
#第一次一定會執行,until則是false才執行
do while i < 2
loop do #無窮迴圈
puts "hi"
end
not版流程控制
if x==2
puts "hi"
end
unless x==2
puts "hi"
end
until x==2 do
puts "hi"
end
for i in 1..5 do puts "hi" end
5.times{|i| puts i}
1.upto(10){|i| puts i }
5.downto(1){|i| puts i}#後面開始
在程式前後加料
begin{#加料}
#略
end{#加料}
即席文件字串
sunny = << 29
#略,也能用-29達到縮排效果
29
(1..25) === 14 #判斷14是不是範圍
(1...25) === 14 #不包含25
nu = Range.new(1,9)
nu.to_a #建立1~9陣列
sleep 1是每隔1秒
get&set
#一般寫法
def bark
@bark
end
def bark=(val)
@bark = val
end
class dog
attr :bark true #一行搞定= ="
end
類別方法的宣告
class dog
def dog.rr(i)
puts i
end
end
模組
module aaa
def aaa.roll(num)#也可不加aaa
end
end
用法
class bbb
include aaa
end
g = bbb.new
g.roll
沒有留言:
張貼留言