over 2 years ago

RailsFun_新手教學_day1 _HD

01:30

rvm.io

07:25

教method怎麼看。
ruby doc
ruby float doc
左邊是如何使用的列表

09:00

.method

18:00

"yo\noo" => "yo\noo"
'yo\noo' => yo   noo

29:00

布林運算

三元運算式:正確執行第一個,錯誤執行第二個

false ? 123 : 234
=> 234
錯誤,第二個

true ? 123 : 456
=> 123
正確,第一個

40:00

method 的用法

def temp1
    puts 123
end
def temp(x)
    puts x
end
temp(100) => 100

括號可以省略,可以做縮寫

def temp x
    puts x
end
temp(100) => 100

42:30

wrong number of argument  (2 for 3)

要三個變數,可是只給兩個

44:00

有預設值可以不用給

temp (x , y=100, z = 10)

44:30

俗稱的變數名稱:argv,其實也可以隨便改,譬如list

def temp (x , y=100, *argv)
  ap [x , y , argv]
end
temp(1)
=> 
[0] 1
[1] 100
[2] []
temp(1,2)
=> 
[0] 1
[1] 2
[2] []
temp(1,2, 3,4,5,6,7,8)
=> 
[0] 1
[1] 2
[2] [
    [0] 3
    [1] 4
    [2] 5
    [3] 6
    [4] 7
    [5] 8
]

46:00 很難懂的&block,其實也是個名稱,可以改為&werwer

def temp (x , y=100, *argv, &block)
  block.call(x , y, argv)
end
temp(1,2,3) do |x,y,argv|
  ap [x,y,argv]
end

=> 
[0] 1
[1] 2
[2] [
    [0] 3
]

49:00

&block是一支程式

=> do |x,y,argv|
  ap [x,y,argv]
end

51:30

講PROC

Proc.new do |x| puts x ; end
=>
Proc.new do |x|
    puts x
end

=> Proc.new { |x|
    puts x
}

[1,2,3,4].each {|i| puts i}

53:00

x = Proc.new {|x| puts x}
x.call(999)
=>999

54:00

def temp(&block)
    puts block.class
    block.call(99)
end

temp {|x| puts x}
Proc
99

56:00

最後一個參數是hash (這是method的使用,前面講的都是method的定義)

1:04:00

變數的生存範圍

1:05:00

class Car
    def self.hihi #工廠在用

    puts 'yoo'
    end
    def hihi #汽車在用
        put 'hoo'
    end
end

1:10:00

class Car #這邊要用@@

    def self.set_name(name)
        @@name = name
    end
    def self.get_name
        @@name
    end
end

1:17:00

@XXX ||= N

1:18:00

@moo ||= 123 如果沒有,就給他123,如果有的話,就不動它。
@moo = 123 unless @moo

如果@moo是false (只有nil跟false是false),unless @moo會變true,就會執行@moo=123
如果@moo有值(譬如是456),就會變成true(有值就會是true),unless @moo 就會變false,就不會執行@moo=123,會維持原有的@mooo (也就456)

非常適合放在method裡面,尤其是接到某個值之後,要去做一些初始化的動作的時候,就可以這樣寫。因為call一個method通常會塞一些東西進去,然後要做一些處理,勢必要去判斷那個東西的時候,這樣寫會很方便。

1:20:00

def temp option = nil
    option ||= {:name => "Kitty"}
    return
end

temp 
=> {:name => "Kitty"}

temp :wer =>234 
=> {:wer =>234}

1:25:40

開始講module
Module沒有new
跟工廠的用法一樣,不需要new的東西可以用module,不需要生出小汽車的東西可以直接用module

module Muu
    def self.temp
        puts 'temp'
    end
end

Muu.temp => temp

1:27

講self

1:30:00

講super:call老爸,被蓋過的method可以call super再去用老爸

1:32:50

講mixin

module A
    def hello
        puts "Kitty"
    end
end

不能夠直接A.hello

要用

Class B
    include A
end

B.new.hello => "Kitty"

1:40:00

開始看ruby-doc.org

1:55:00

開始講hash

.each do  | array[key,value]|
.each_pair do |key, value|
.each_value do |value|
.each_key do |key|

中間再講regex

2:17:00

講marshal : 可以把所有東西都變成string

2:23:00

講thread

2:38:00 open-uri(或是使用curb)跟okogiri的範例

開始講nokogiri:分析HTML

$irb

terminal 先require這兩個功能
irb(main):require 'open-uri'
irb(main):require 'nokogiri'
terminal 先用open-uri的read
irb(main):open('http://www.tmuh.org.tw/team/team/053/053/050216')
=> #<Tempfile:/var/folders/18/7jxtd5l14sj9jqqqnqjjwzs80000gn/T/open-uri20170101-49023-eh0exw>

irb(main):003:0> open('http://www.tmuh.org.tw/team/team/053/053/050216').read
terminal 使用Nokogiri::HTML()
irb(main):html = open('http://www.tmuh.org.tw/team/team/053/053/050216').read
irb(main):doc = Nokogiri::HTML(html)
irb(main):doc.search('img')
terminal
irb(main):
doc.search('img').each do |img|
    puts img.attr('src')
end ; true
terminal 如果沒有http://的話就是相對路徑,就要先map拿出來,再塞回去。
ans = []
doc.search('img').each do |img|
    ans << img.attr('src')
end ; true
temp_ans = ans.map{|url| url.match(/^htpp/) ? url : "http://www.tmuh.org.tw#{url}"}
terminal 叫出來看:
puts temp_ans
terminal 如何Linux下,抓一張圖
temp_ans.each do |full_url|
`wget #{full_url}`
end
← Hello World ROR TUTORIAL (3RD ED.) Ch1 From zero to deploy →