3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《Effective-Ruby》读书笔记

發布時間:2025/3/21 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《Effective-Ruby》读书笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本篇是在我接觸了 Ruby 很短一段時間后有幸捧起的一本書,下面結合自己的一些思考,來輸出一下自己的讀書筆記

前言

學習一門新的編程語言通常需要經過兩個階段:

  • 第一個階段是學習這門編程語言的語法和結構,如果我們具有其他編程語言的經驗,那么這個過程通常只需要很短的時間;
  • 第二個階段是深入語言、學習語言風格,許多編程語言在解決常見的問題時都會使用獨特的方法,Ruby 也不例外。

《Effictive Ruby》就是一本致力于讓你在第二階段更加深入和全面的了解 Ruby,編寫出更具可讀性、可維護性代碼的書,下面我就著一些我認為的重點和自己的思考來進行一些精簡和說明

第一章:讓自己熟悉 Ruby

第 1 條:理解 Ruby 中的 True

  • 每一門語言對于布爾類型的值都有自己的處理方式,在 Ruby 中,除了 false 和 nil,其他值都為真值,包括數字 0 值。
  • 如果你需要區分 false 和 nil,可以使用 nil? 的方式或 “==“ 操作符并將 false 作為左操作對象。
# 將 false 放在左邊意味著 Ruby 會將表達式解析為 FalseClass#== 方法的調用(該方法繼承自 Object 類) # 這樣我們可以很放心地知道:如果右邊的操作對象也是 false 對象,那么返回值為 true if false == x... end# 換句話說,把 false 置為有操作對象是有風險的,可能不同于我們的期望,因為其他類可能覆蓋 Object#== 方法從而改變下面這個比較 class Baddef == (other)trueend endirb> false == Bad.new ---> false irb> Bad.new == false ---> true

第 2 條:所有對象的值都可能為 nil

在 Ruby 中倡導接口高于類型,也就是說預期要求對象是某個給定類的實例,不如將注意力放在該對象能做什么上。沒有什么會阻止你意外地把 Time 類型對象傳遞給接受 Date 對象的方法,這些類型的問題雖然可以通過測試避免,但仍然有一些多態替換的問題使這些經過測試的應用程序出現問題:

undefined method 'fubar' for nil:NilClass (NoMethodError)

當你調用一個對象的方法而其返回值剛好是討厭的 nil 對象時,這種情況就會發生···nil 是類 NilClass 的唯一對象。這樣的錯誤會悄然逃過測試而僅在生產環境下出現:如果一個用戶做了些超乎尋常的事。

另一種導致該結果的情況是,當一個方法返回 nil 并將其作為參數直接傳給一個方法時。事實上存在數量驚人的方式可以將 nil 意外地引入你運行中的程序。最好的防范方式是:假設任何對象都可以為 nil,包括方法參數和調用方法的返回值。

# 最簡單的方式是使用 nil? 方法 # 如果方法接受者(receiver)是 nil,該方法將返回真值,否則返回假值。 # 以下幾行代碼是等價的: person.save if person person.save if !person.nil? person.save unless person.nil?# 將變量顯式轉換成期望的類型常常比時刻擔心其為 nil 要容易得多 # 尤其是在一個方法即使是部分輸入為 nil 時也應該產生結果的時候 # Object 類定義了幾種轉換方法,它們能在這種情況下派上用場 # 比如,to_s 方法會將方法接受者轉化為 string: irb> 13.to_s ---> "13" irb> nil.to_s ---> ""# to_s 如此之棒的原因在于 String#to_s 方法只是簡單返回 self 而不做任何轉換和復制 # 如果一個變量是 string,那么調用 to_s 的開銷最小 # 但如果變量期待 string 而恰好得到 nil,to_s 也能幫你扭轉局面: def fix_title (title)title.to_s.capitalize end

這里還有一些適用于 nil 的最有用的例子:

irb> nil.to_a ---> []irb> nil.to_i ---> 0irb> nil.to_f ---> 0.0

當需要同時考慮多個值的時候,你可以使用類 Array 提供的優雅的討巧方式。Array#compact 方法返回去掉所有 nil 元素的方法接受者的副本。這在將一組可能為 nil 的變量組裝成 string 時很常用。比如:如果一個人的名字由 first、middle 和 last 組成(其中任何一個都可能為 nil),那么你可以用下面的代碼組成這個名字:

name = [first, middle, last].compact.join(" ")

nil 對象的嗜好是在你不經意間偷偷溜進正在運行的程序中。無論它來自用戶輸入、無約束數據庫,還是用 nil 來表示失敗的方法,意味著每個變量都可能為 nil。

第 3 條:避免使用 Ruby 中古怪的 Perl 風格語法

  • 推薦使用 String#match 替代 String#=~。前者將匹配信息以 MatchDate 對象返回,而非幾個特殊的全局變量。
  • 使用更長、更表意的全局變量的別名,而非其短的、古怪的名字(比如,用?$LOAD_PATH?替代?$:?)。大多數長的名字需要在加載庫 English 之后才能使用。
  • 避免使用隱式讀寫全局變量 $_ 的方法(比如,Kernel#print、Regexp#~ 等)
# 這段代碼中有兩個 Perl 語法。 # 第一個:使用 String#=~ 方法 # 第二個:在上述代碼中看起來好像是使用了一個全局變量 $1 導出第一個匹配組的內容,但其實不是... def extract_error (message)if message =~ /^ERROR:\s+(.+)$/$1else"no error"end end# 以下是替代方法: def extract_error (message)if m = message.match(/^ERROR:\s+(.+)$/)m[1]else"no error"end end

第 4 條:留神,常量是可變的

最開始接觸 Ruby 時,對于常量的認識大概可能就是由大寫字母加下劃線組成的標識符,例如 STDIN、RUBY_VERSION。不過這并不是故事的全部,事實上,由大寫字母開頭的任何標識符都是常量,包括 String 或 Array,來看看這個:

module DefaultsNOTWORKS = ["192.168.1","192.168.2"] end def purge_unreachable (networks=Defaults::NETWORKS)networks.delete_if do |net|!ping(net + ".1")end end

如果調用方法 unreadchable 時沒有加參數的話,會意外的改變一個常量的值。在 Ruby 中這樣做甚至都不會警告你。好在有一種解決這個問題的方法——freeze 方法:

module DefaultsNOTWORKS = ["192.168.1","192.168.2"].freeze end

加入你再想改變常量 NETWORKS 的值,purge_unreadchable 方法就會引入 RuntimeError 異常。根據一般的經驗,總是通過凍結常量來阻止其被改變,然而不幸的是,凍結 NETWORKS 數組還不夠,來看看這個:

def host_addresses (host, networks=Defaults::NETWORKS)networks.map {|net| net << ".#{host}"} end

如果第二個參數沒有賦值,那么 host_addresses 方法會修改數組 NETWORKS 的元素。即使數組 NETWORKS 自身被凍結,但是元素仍然是可變的,你可能無法從數組中增刪元素,但你一定可以對存在的元素加以修改。因此,如果一個常量引用了一個集合,比如數組或者是散列,那么請凍結這個集合以及其中的元素:

module DefaultsNETWORKS = ["192.168.1","192.168.2"].map(&:freeze).freeze end

甚至,要達到防止常量被重新賦值的目的,我們可以凍結定義它的那個模塊:

module DefaultsTIMEOUT = 5 endDefaults.freeze

第 5 條:留意運行時警告

  • 使用命令行選項 ”-w“ 來運行 Ruby 解釋器以啟用編譯時和運行時的警告。設置環境變量 RUBYOPT 為 ”-w“ 也可以達到相同目的。
  • 如果必須禁用運行時的警告,可以臨時將全局變量 $VERBOSE 設置為 nil。
# test.rb def add (x, y)z = 1x + y end puts add 1, 2# 使用不帶 -w 參數的命令行 irb> ruby test.rb ---> 3 # 使用帶 -w 參數的命令行 irb< ruby -w test.rb ---> test.rb:1: warning: parentheses after method name is interpreted as an argument list, not a decomposed argument ---> test.rb:2: warning: assigned but unused variable - z ---> 3

第二章:類、對象和模塊

第 6 條:了解 Ruby 如何構建集成體系

讓我們直接從代碼入手吧:

class Persondef name...end endclass Customer < Person... end irb> customer = Customer.new ---> #<Customer>irb> customer.superclass ---> Personirb> customer.respond_to?(:name) ---> true

上面的代碼幾乎就和你預想的那樣,當調用 customer 對象的 name 方法時,Customer 類會首先檢查自身是否有這個實例方法,沒有那么就繼續搜索。

順著集成體系向上找到了 Person 類,在該類中找到了該方法并將其執行。(如果 Person 類中沒有找到的話,Ruby 會繼續向上直到到達 BasicObject)

但是如果方法在查找過程中直到類樹的根節點仍然沒有找到匹配的辦法,那么它將重新從起點開始查找,不過這一次會查找 method_missing 方法。

下面我們開始讓事情變得更加有趣一點:

module ThingsWithNamesdef name...end endclass Personinclude(ThingsWithNames) end irb> Person.superclass ---> Object irb> customer = Customer.new ---> #<Customer> irb> customer.respond_to?(:name) ---> true

這里把 name 方法從 Person 類中取出并移到一個模塊中,然后把模塊引入到了 Person 類。Customer 類的實例仍然可以如你所料響應 name 方法,但是為什么呢?顯然,模塊 ThingsWithNames 并不在集成體系中,因為 Person 類的超類仍然是 Object 類,那會是什么呢?其實,Ruby 在這里對你撒謊了!當你 include 方法來將模塊引入類時,Ruby 在幕后悄悄地做了一些事情。它創建了一個單例類并將它插入類體系中。這個匿名的不可見類被鏈向這個模塊,因此它們共享了實力方法和常量。

當每個模塊被類包含時,它會立即被插入集成體系中包含它的類的上方,以后進先出(LIFO)的方式。每個對象都通過變量 superclass 鏈接,像單鏈表一樣。這唯一的結果就是,當 Ruby 尋找一個方法時,它將以逆序訪問訪問每個模塊,最后包含的模塊最先訪問到。很重要的一點是,模塊永遠不會重載類中的方法,因為模塊插入的位置是包含它的類的上方,而 Ruby 總是會在向上檢查之前先檢查類本身。
(好吧······這不是全部的事實。確保你閱讀了第 35 條,來看看 Ruby 2.0 中的 prepend 方法是如何使其復雜化的)

要點回顧:

  • 要尋找一個方法,Ruby 只需要向上搜索類體系。如果沒有找到這個方法,就從起點開始搜搜 method_missing 方法。
  • 包含模塊時 Ruby 會悄悄地創建單例類,并將其插入在繼承體系中包含它的類的上方。
  • 單例方法(類方法和針對對象的方法)存儲于單例類中,它也會被插入繼承體系中。

第 7 條:了解 super 的不同行為

  • 當你想重載繼承體系中的一個方法時,關鍵字 super 可以幫你調用它。
  • 不加括號地無參調用 super 等價于將宿主方法的素有參數傳遞給要調用的方法。
  • 如果希望使用 super 并且不向重載方法傳遞任何參數,必須使用空括號,即 super()。
  • 當 super 調用失敗時,自定義的 method_missing 方法將丟棄一些有用的信息。在第 30 條中有 method_missing 的替代解決方案。

第 8 條:初始化子類時調用 super

  • 當創建子類對象時,Ruby 不會自動調用超類中的 initialize 方法。作為替代,常規的方法查詢規則也適用于 initialize 方法,只有第一個匹配的副本會被調用。
  • 當為顯式使用繼承的類定義 initialize 方法時,使用 super 來初始化其父類。在定義 initialize_copy 方法時,應使用相同的規則
class Parentdef initialize (name)@name = nameend endclass Child < Parentdef initialize (grade)@grade = gradeend end# 你能看到上面的窘境,Ruby 沒有提供給子類和其超類的 initialize 方法建立聯系的方式 # 我們可以使用通用意義上的 super 關鍵字來完成繼承體系中位于高層的辦法: class Child < Parentdef initialize (name, grade)super(name) # Initialize Parent.@grade = gradeend end

第 9 條:提防 Ruby 最棘手的解析

這是一條關于 Ruby 可能會戲弄你的另一條提醒,要點在于:Ruby 在對變量賦值和對 setter 方法調用時的解析是有區別的!直接看代碼吧:

# 這里把 initialize 方法體中的內容當做第 counter= 方法的調用也不是毫無道理 # 事實上 initialize 方法會創建一個新的局部變量 counter,并將其賦值為 0 # 這是因為 Ruby 在調用 setter 方法時要求存在一個顯式接受者 class Counterattr_accessor(:counter)def initializecounter = 0end... end# 你需要使用 self 充當這個接受者 class Counterattr_accessor(:counter)def initializeself.counter = 0end... end# 而在你調用非 setter 方法時,不需要顯式指定接受者 # 換句話說,不要使用不必要的 self,那會弄亂你的代碼: class Nameattr_accessor(:first, :last)def initialize (first, last)self.first = firstself.last = lastenddef fullself.first + " " + self.last # 這里沒有調用 setter 方法使用 self 多余了end end# 就像上面 full 方法里的注釋,應該把方法體內的內容改為 first + " " + last

第 10 條:推薦使用 Struct 而非 Hash 存儲結構化數據

看代碼吧:

# 假設你要對一個保存了年度天氣數據的 CSV 文件進行解析并存儲 # 在 initialize 方法后,你會獲得一個固定格式的哈希數組,但是存在以下的問題: # 1.不能通過 getter 方法訪問其屬性,也不應該將這個哈希數組通過公共接口向外暴露,因為其中包含了實現細節 # 2.每次你想在類內部使用該哈希時,你不得不回頭來看 initialize 方法 # 因為你不知道CSV具體的對應是怎樣的,而且當類成熟情況可能還會發生變化 require('csv') class AnnualWeatherdef initialize (file_name)@readings = []CSV.foreach(file_name, headers: true) do |row|@readings << {:date => Date.parse(row[2]),:high => row[10].to_f,:low => row[11].to_f,}endend end# 使用 Struct::new 方法的返回值賦給一個常量并利用它創建對象的實踐: class AnnualWeather# Create a new struct to hold reading data.Reading = Struct.new(:date, :high, :low)def initialize (file_name)@readings = []CSV.foreach(file_name, headers: true) do |row|@readings << Reading.new(Date.parse(row[2]),row[10].to_f,row[11].to_f)endend end# Struct 類本身比你第一次使用時更加強大。除了屬性列表,Struct::new 方法還能接受一個可選的塊 # 也就是說,我們能在塊中定義實例方法和類方法。比如,我們定義一個返回平均每月平均溫度的 mean 方法: Reading = Struct.new(:date, :high, :low) dodef mean(high + low) / 2.0end end

另外從其他地方看到了關于 Struct::new 的實踐

  • 考慮使用 Struct.new, 它可以定義一些瑣碎的 accessors, constructor(構造函數) 和 comparison(比較) 操作。
# good class Personattr_reader :first_name, :last_namedef initialize(first_name, last_name)@first_name = first_name@last_name = last_nameend end# better class Person < Struct.new(:first_name, :last_name) end
  • 考慮使用 Struct.new,它替你定義了那些瑣碎的存取器(accessors),構造器(constructor)以及比較操作符(comparison operators)。
# good class Personattr_accessor :first_name, :last_namedef initialize(first_name, last_name)@first_name = first_name@last_name = last_nameend end# better Person = Struct.new(:first_name, :last_name) do end
  • 要去 extend 一個 Struct.new - 它已經是一個新的 class。擴展它會產生一個多余的 class 層級 并且可能會產生怪異的錯誤如果文件被加載多次。

第 11 條:通過在模塊中嵌入代碼來創建命名空間

  • 通過在模塊中嵌入代碼來創建命名空間
  • 讓你的命名空間結構和目錄結構相同
  • 如果使用時可能出現歧義,可使用 ”::” 來限定頂級常量(比如,::Array)

第 12 條:理解等價的不同用法

看看下面的 IRB 回話然后自問一下:為什么方法 equal? 的返回值和操作符 “==” 的不同呢?

irb> "foo" == "foo" ---> true irb> "foo".equal?("foo") ---> false

事實上,在 Ruby 中有四種方式來檢查對象之間的等價性,下面來簡單總個結吧:

  • 絕不要重載 equal? 方法。該方法的預期行為是,嚴格比較兩個對象,僅當它們同時指向內存中同一對象時其值為真(即,當它們具有相同的 object_id 時)
  • Hash 類在沖突檢查時使用 eql? 方法來比較鍵對象。默認實現可能和你的想像不同。遵循第 13 條建議之后再使用別名 eql? 來替代 “==” 書寫更合理的 hash 方法
  • 使用 “==” 操作符來測試兩個對象是否表示相同的值。有些類比如表示數字的類會有一個粗糙的等號操作符進行類型轉換
  • case 表達式使用 “===“ 操作符來測試每個 when 語句的值。左操作數是 when 的參數,右操作數是 case 的參數

第 13 條:通過 "<=>" 操作符實現比較和比較模塊

要記住在 Ruby 語言中,二元操作符最終會被轉換成方法調用的形式,左操作數對應著方法的接受者,右操作數對應著方法第一個也是唯一的那個參數。

  • 通過定義 "<=>" 操作符和引入 Comparable 模塊實現對象的排序
  • 如果左操作數不能與右操作數進行比較,"<=>" 操作符應該返回 nil
  • 如果要實現類的 "<=>" 運算符,應該考慮將 eql? 方法設置為 "==" 操作符的別名,特別是當你希望該類的所有實例可以被用來作為哈希鍵的時候,就應該重載哈希方法

第 14 條:通過 protected 方法共享私有狀態

  • 通過 protected 方法共享私有狀態
  • 一個對象的 protected 方法若要被顯式接受者調用,除非該對象與接受者是同類對象或其具有相同的定義該 protected 方法的超類
# Ruby 語言中,私有方法的行為和其他面向對象的編程語言中不太相同。Ruby 語言僅僅在私有方法上加了一條限制————它們不能被顯式接受者調用 # 無論你在繼承關系中的哪一級,只要你沒有使用接受者,你都可以調用祖先方法中的私有方法,但是你不能調用另一個對象的私有方法 # 考慮下面的例子: # 方法 Widget#overlapping? 會檢測其本身是否和另一個對象在屏幕上重合 # Widget 類的公共接口并沒有將屏幕坐標對外暴露,它們的具體實現都隱藏在了內部 class Widgetdef overlapping? (other)x1, y1 = @screen_x, @screen_yx2, y2 = other.instance_eval {[@screen_x, @screen_y]}...end end# 可以定義一個暴露私有屏幕坐標的方法,但并不通過公共接口來實現,其實現方式是聲明該方法為 protected # 這樣我們既保持了原有的封裝性,也使得 overlapping? 方法可以訪問其自身以及其他傳入的 widget 實例的坐標 # 這正式設計 protected 方法的原因————在相關類之間共享私有信息 class Widgetdef overlapping? (other)x1, y1 = @screen_x, @screen_yx2, y2 = other.screen_coordinates...endprotecteddef screen_coordinates[@screen_x, @screen_y]end end

第 15 條:優先使用實例變量而非類變量

  • 優先使用實例變量(@)而非類變量(@@)
  • 類也是對象,所以它們擁有自己的私有實例變量集合

第三章:集合

第 16 條:在改變作為參數的集合之前復制它們

在 Ruby 中多數對象都是通過引用而不是通過實際值來傳遞的,當將這種類型的對象插入容器時,集合類實際存儲著該對象的引用而不是對象本身。
(值得注意的是,這條準則是個例如:Fixnum 類的對象在傳遞時總是通過值而不是引用傳遞)

這也就意味著當你把集合作為參數傳入某個方法并進行修改時,原始集合也會因此被修改,有點間接,不過很容易看到這種情況的發生。

Ruby 語言自帶了兩個用來復制對象的方法:dup 和 clone。

它們都會基于接收者創建新的對象,但是與 dup 方法不同的是,clone 方法會保留原始對象的兩個附加特性。

首先,clone 方法會保留接受者的凍結狀態。如果原始對象的狀態是凍結的,那么生成的副本也會是凍結的。而 dup 方法就不同了,它永遠不會返回凍結的對象。

其次,如果接受這種存在單例方法,使用 clone 也會復制單例類。由于 dup 方法不會這樣做,所以當使用 dup 方法時,原始對象和使用 dup 方法創建的副本對于相同消息的響應可能是不同的。

# 也可以使用 Marshal 類將一個集合及其所持有的元素序列化,然后再反序列化: irb> a = ["Monkey", "Brains"] irb> b = Marshal.load(Marshal.dump(a)) irb> b.each(&:upcasel); b.first ---> "MONKEY" irb> a.last ---> "Brains"

第 17 條:使用 Array 方法將 nil 及標量對象轉換成數組

  • 使用 Array 方法將 nil 及標量對象轉換成數組
  • 不要將哈希傳給 Array 方法,它會被轉化成一個嵌套數組的集合
# 考慮下面這樣一個訂披薩的類: class Pizzadef initialize (toppings)toppings.each do |topping|add_and_price_topping(topping)endend end# 上面的 initialize 方法期待的是一個 toppings 數組,但我們能傳入單個 topping,甚至是在沒有 topping 對象的時候直接傳入 nil # 你可能會想到使用可變長度參數列表來實現它,并將參數類型改為 *topping,這樣會把所有的參數整合成一個數組。 # 盡管這樣做可以讓我們傳入單個 topping 對象,擔當傳入一組對象給 initialize 方法的時候必須使用 "*" 顯式將其拓展成一個數組。 # 所以這樣做僅僅是拆東墻補西墻罷了,一個更好的解決方式是將傳入的參數轉換成一個數組,這樣我們就明確地知道我要做的是什么了 # 先對 Array() 做一些探索: irb> Array('Betelgeuse') ---> ["Betelgeuse"] irb> Array(nil) ---> [] irb> Array(['Nadroj', 'Retep']) ---> ["Nadroj", "Retep"] irb> h = {pepperoni: 20,jalapenos: 2} irb> Array(h) ---> [[:pepperoni, 20], [:jalapenos, 2]] # 如果你想處理一組哈希最好采用第 10 條的建議那樣# 回答訂披薩的問題上: # 經過一番改造,它現在能夠接受 topping 數組、單個 topping,或者沒有 topping(nil or []) class Pizzadef initialize (toppings)Array(toppings).each do |topping|add_and_price_topping(topping)endend... end

第 18 條:考慮使用集合高效檢查元素的包含性

(書上對于這一條建議的描述足足有 4 頁半,但其實可以看下面結論就ok,結尾有實例代碼)

  • 考慮使用 Set 來高效地檢測元素的包含性
  • 插入 Set 的對象必須也被當做哈希的鍵來用
  • 使用 Set 之前要引入它
# 原始版本 class Roledef initialize (name, permissions)@name, @permissions = name, permissionsenddef can? (permission)@permissions.include?(permission)end end# 版本1.0:使用 Hash 替代 Array 的 Role 類: # 這樣做基于兩處權衡,首先,因為哈希只存儲的鍵,所以數組中的任何重復在轉換成哈希的過程中都會丟失。 # 其次,為了能夠將數組轉換成哈希,需要將整個數組映射,構建出一個更大的數組,從而轉化為哈希。這將性能問題從 can? 方法轉移到了 initialize 方法 class Roledef initialize (name, permissions)@name = name@permissions = Hash[permissions.map {|p| [p, ture]}]enddef can? (permission)@permissions.include?(permission)end end# 版本2.0:引入 Set: # 性能幾乎和上一個哈希版本的一樣 require('set') class Roledef initialize (name, permissions)@name, @permissions = name, Set.new(permissions)enddef can? (permission)@permissions.include?(permission)end end# 最終的例子 # 這個版本自動保證了集合中沒有重復的記錄,且重復條目是很快就能被檢測到的 require('set') require('csv') class AnnualWeatherReading = Struct.new(:date, :high, :low) dodef eql? (other) date.eql?(other.date); enddef hash; date.hash; endenddef initialize (file_name)@readings = Set.newCSV.foreach(file_name, headers: true) do |row|@readings << Reading.new(Date.parse(row[2]),row[10].to_f,row[11].to_f)endend end

第 19 條:了解如何通過 reduce 方法折疊集合

盡管可能有點云里霧里,但還是考慮考慮先食用代碼吧:

# reduce 方法的參數是累加器的起始值,塊的目的是創建并返回一個適用于下一次塊迭代的累加器 # 如果原始集合為空,那么塊永遠也不會被執行,reduce 方法僅僅是簡單地返回累加器的初始值 # 要注意塊并沒有做任何賦值。這是因為在每個迭代后,reduce 丟棄上次迭代的累加器并保留了塊的返回值作為新的累加器 def sum (enum)enum.reduce(0) do |accumulator, element|accumulator + elementend end# 另一個快捷操作方式對處理塊本身很方便:可以給 reduce 傳遞一個符號(symbol)而不是塊。 # 每個迭代 reduce 都使用符號作為消息名稱發送消息給累加器,同時將當前元素作為參數 def sum (enum)enum.reduce(0, :+) end# 考慮一下把一個數組的值全部轉換為哈希的鍵,而它們的值都是 true 的情況: Hash[array.map {|x| [x, true]}] # reduce 可能會提供更加完美的方案(注意此時 reduce 的起始值為一個空的哈希): array.reduce({}) do |hash, element|hash.update(element => true) end# 再考慮一個場景:我們需要從一個存儲用戶的數組中篩選出那些年齡大于或等于 21 歲的人群,之后我們希望將這個用戶數組轉換成一個姓名數組 # 在沒有 reduce 的時候,你可能會這樣寫: users.select {|u| u.age >= 21}.map(&:name) # 上面這樣做當然可以,但并不高效,原因在于我們使用上面的語句時對數組進行了多次遍歷 # 第一次是通過 select 篩選出了年齡大于或等于 21 歲的人,第二次則還需要映射成只包含名字的新數組 # 如果我們使用 reduce 則無需創建或遍歷多個數組: users.reduce([]) do |names, user|names << user.name if user.age >= 21names end

引入 Enumerable 模塊的類會得到很多有用的實例方法,它們可用于對對象的集合進行過濾、遍歷和轉化。其中最為常用的應該是 map 和 select 方法,這些方法是如此強大以至于在幾乎所有的 Ruby 程序中你都能見到它們的影子。

像數組和哈希這樣的集合類幾乎已經是每個 Ruby 程序不可或缺的了,如果你還不熟悉 Enumberable 模塊中定義的方法,你可能已經自己寫了相當多的 Enumberable 模塊已經具備的方法,知識你還不知道而已。

Enumberable 模塊

戳開 Array 的源碼你能看到 include Enumberable 的字樣(引入的類必須實現 each 方法不然報錯),我們來簡單闡述一下 Enumberable API:

irb> [1, 2, 3].map {|n| n + 1} ---> [2, 3, 4] irb> %w[a l p h a b e t].sort ---> ["a", "a", "b", "e", "h", "l", "p", "t"] irb> [21, 42, 84].first ---> 21

上面的代碼中:

  • 首先,我們使用了流行的 map 方法遍歷每個元素,并將每個元素 +1 處理,然后返回新的數組;
  • 其次,我們使用了 sort 方法對數組的元素進行排序,排序采用了 ASCII 字母排序
  • 最后,我們使用了查找方法 select 返回數組的第一個元素
  • reduce 方法到底干了什么?它為什么這么特別?在函數式編程的范疇中,它是一個可以將一個數據結構轉換成另一種結構的折疊函數。

    讓我們先從宏觀的角度來看折疊函數,當使用如 reduce 這樣的折疊函數時你需要了解如下三部分:

    • 枚舉的對象是 reduce 消息的接受者。某種程度上這是你想轉換的原始集合。顯然,它的類必須引入 Enumberable 模塊,否則你無法對它調用 reduce 方法;
    • 塊會被源集合中的每個元素調用一次,和 each 方法調用塊的方式類似。但和 each 不同的是,傳入 reduce 方法的塊必須產生一個返回值。這個返回值代表了通過當前元素最終折疊生成的數據結構。我們將會通過一些例子來鞏固這一知識點。
    • 一個代表了目標數據結構起始值的對象,被稱為累加器。每一次塊的調用都會接受當前的累加器值并返回新的累加器值。在所有元素都被折疊進累加器后,它的最終結構也就是 reduce 的返回值。

    此時了解了這三部分你可以回頭再去看一看代碼。

    試著回想一下上一次使用 each 的場景,reduce 能夠幫助你改善類似下面這樣的模式:

    hash = {}array.each do |element|hash[element] = true end

    第 20 條:考慮使用默認哈希值

    我確定你是一個曾經在塊的語法上徘徊許久的 Ruby 程序員,那么請告訴我,下面這樣的模式在代碼中出現的頻率是多少?

    def frequency (array)array.reduce({}) do |hash, element|hash[element] ||= 0 # Make sure the key exists.hash[element] += 1 # Then increment it.hash # Return the hash to reduce.end end

    這里特地使用了 "||=" 操作符以確保在修改哈希的值時它是被賦過值的。這樣做的目的其實也就是確保哈希能有一個默認值,我們可以有更好的替代方案:

    def frequency (array)array.reduce(Hash.new(0)) do |hash, element|hash[element] += 1 # Then increment it.hash # Return the hash to reduce.end end

    看上去還真是那么一回事兒,但是小心,這里埋藏著一個隱蔽的關于哈希的陷阱。

    # 先來看一下這個 IRB 會話: irb> h = Hash.new(42) irb> h[:missing_key] ---> 42、 irb> h.keys # Hash is still empty! ---> [] irb> h[:missing_key] += 1 ---> 43 irb> h.keys # Ah, there you are. ---> [:missing_key]# 注意,當訪問不存在的鍵時會返回默認值,但這不會修改哈希對象。 # 使用 "+=" 操作符的確會像你想象中那般更新哈希,但并不明確,回顧一下 "+=" 操作符會展開成什么可能會很有幫助: # Short version: hash[key] += 1# Expands to: hash[key] = hash[key] + 1# 現在賦值的過程就很明確了,先取得默認值再進行 +1 的操作,最終將其返回的結果以同樣的鍵名存入哈希 # 我們并沒有以任何方式改變默認值,當然,上面一段代碼的默認值是數字類型,它是不能修改的 # 但是如果我們使用一個可以修改的值作為默認值并在之后使用了它情況將會變得更加有趣: irb> h = Hash.new([]) irb> h[:missing_key] ---> [] irb> h[:missing_key] << "Hey there!" ---> ["Hey there!"] irb> h.keys # Wait for it... ---> [] irb> h[:missing_key] ---> ["Hey there!"]# 看到上面關于 "<<" 的小騙局了嗎?我從沒有改變哈希對象,當我插入一個元素之后,哈希并么有改變,但是默認值改變了 # 這也是 keys 方法提示這個哈希是空但是訪問不存在的鍵時卻反悔了最近修改的值的原因 # 如果你真想插入一個元素并設置一個鍵,你需要更深入的研究,但另一個不明顯的副作用正等著你: irb> h = Hash.new([]) irb> h[:weekdays] = h[:weekdays] << "Monday" irb> h[:months] = h[:months] << "Januray" irb> h.keys ---> [:weekdays, :months] irb> h[:weekdays] ---> ["Monday", "January"] irb> h.default ---> ["Monday", "Januray"]# 兩個鍵共享了同一個默認數組,多數情況你并不想這么做 # 我們真正想要的是當我們訪問不存在的鍵時能返回一個全新的數組 # 如果給 Hash::new 一個塊,當需要默認值時這個塊就會被調用,并友好地返回一個新創建的數組: irb> h = Hash.new{[]} irb> h[:weekdays] = h[:weekdays] << "Monday" ---> ["Monday"] irb> h[:months] = h[:months] << "Januray" ---> ["Januray"] irb> h[:weekdays] ---> ["Monday"]# 這樣好多了,但我們還可以往前一步。 # 傳給 Hash::new 的塊可以有選擇地接受兩個參數:哈希本身和將要訪問的鍵 # 這意味著我們如果想去改變哈希也是可的,那么當訪問一個不存在的鍵時,為什么不將其對應的值設置為一個新的空數組呢? irb> h = Hash.new{|hash, key| hash[key] = []} irb> h[:weekdays] << "Monday" irb> h[:holidays] ---> [] irb> h.keys ---> [:weekdays, :holidays]# 你可能發現上面這樣的技巧存在著重要的不足:每當訪問不存在的鍵時,塊不僅會在哈希中創建新實體,同時還會創建一個新的數組 # 重申一遍:訪問一個不存在的鍵會將這個鍵存入哈希,這暴露了默認值存在的通用問題: # 正確的檢查一個哈希是否包含某個鍵的方式是使用 hash_key? 方法或使用它的別名,但是深感內疚的是通常情況下默認值是 nil: if hash[key]... end# 如果一個哈希的默認值不是 nil 或者 false,這個條件判斷會一直成功:將哈希的默認值設置成非 nil 可能會使程序變得不安全 # 另外還要提醒的是:通過獲取其值來檢查哈希某個鍵存在與否是草率的,其結果也可能和你所預期的不同 # 另一種處理默認值的方式,某些時候也是最好的方式,就是使用 Hash#fetch 方法 # 該方法的第一個參數是你希望從哈希中查找的鍵,但是 fetch 方法可以接受一個可選的第二個參數 # 如果指定的 key 在當前的哈希中找不到,那么取而代之,fetch 的第二個參數會返回 # 如果你省略了第二個參數,在你試圖獲取一個哈希中不存在的鍵時,fetch 方法會拋出一個異常 # 相比于對整個哈希設置默認值,這種方式更加安全 irb> h = {} irb> h[:weekdays] = h.fetch(:weekdays, []) << "Monday" ---> ["Monday"] irb> h.fetch(:missing_key) keyErro: key not found: :missing_key

    所以看過上面的代碼框隱藏的內容后你會發現:

  • 如果某段代碼在接受哈希的非法鍵時會返回 nil,不要為傳入該方法的哈希使用默認值
  • 相比使用默認值,有些時候用 Hash#fetch 方法能更加安全
  • 第 21 條:對集合優先使用委托而非繼承

    這一條也可以被命名為“對于核心類,優先使用委托而非繼承”,因為它同樣適用于 Ruby 的所有核心類。

    Ruby 的所有核心類都是通過 C語言 來實現的,指出這點是因為某些類的實例方法并沒有考慮到子類,比如 Array#reverse 方法,它會返回一個新的數組而不是改變接受者。

    猜猜如果你繼承了 Array 類并調用了子類的 reverse 方法后會發生什么?

    # 是的,LikeArray#reverse 返回了 Array 實例而不是 LikeArray 實例 # 但你不應該去責備 Array 類,在文檔中有寫的很明白會返回一個新的實例,所以達不到你的預期是很自然的 irb> class LikeArray < Array; end irb> x = LikeArray.new([1, 2, 3]) ---> [1, 2, 3] irb> y = x.reverse ---> [3, 2, 1] irb> y.class ---> Array

    當然還不止這些,集合上的許多其他實例方法也是這樣,集成比較操作符就更糟糕了。

    比如,它們允許子類的實例和父類的實例相比較,這說得通嘛?

    irb> LikeArray.new([1, 2, 3]) == [1, 2, 3,] ---> true

    繼承并不是 Ruby 的最佳選擇,從核心的集合類中繼承更是毫無道理的,替代方法就是使用“委托”。

    讓我們來編寫一個基于哈希但有一個重要不同的類,這個類在訪問不存在的鍵時會拋出一個異常。

    實現它有很多不同的方式,但編寫一個新類讓我們可以簡單的重用同一個實現。

    與繼承 Hash 類后為保證正確而到處修修補補不同,我們這一次采用委托。我們只需要一個實例變量 @hash,它會替我們干所有的重活:

    # 在 Ruby 中實現委托的方式有很多,Forwardable 模塊讓使用委托的過程非常容易 # 它將一個存有要代理的方法的鏈表綁定到一個實例變量上,它是標準庫的一部分(不是核心庫),這也是需要顯式引入的原因 require('forwardable') class RaisingHashextend(Forwardable)include(Enumerbale)def_delegators(:@hash, :[], :[]=, :delete, :each,:keys, :values, :length,:empty?, :hash_key?) end

    (更多的探索在書上.這里只是簡單給一下結論.感興趣的童鞋再去看看吧!)

    所以要點回顧一下:

    • 對集合優先使用委托而非繼承
    • 不要忘記編寫用來復制委托目標的 initialize_copy 方法
    • 編寫 freeze、taint 以及 untaint 方法時,先傳遞信息給委托目標,之后調用 super 方法。

    第四章:異常

    第 22 條:使用定制的異常而不是拋出字符串

    • 避免使用字符串作為異常,它們會被轉換成原生的 RuntimeError 對象。取而代之,創建一個定制的異常類
    • 定制的異常類應該繼承自 StandardError,且類名應該以 "Error" 結尾
    • 當為一個工程創建了不止一個異常類時,從創建一個繼承自 StandardError 的基類開始。其他的異常類應該繼承自該定制的基類
    • 如果你對你的定制異常類編寫了 initialize 方法,務必確保其調用了 super 方法,最好在調用時以錯誤信息作為參數
    • 在 initialize 方法中設置錯誤信息時,請牢記:如果在 raise 方法中再度設置錯誤信息會覆蓋原本在 initialize 中設置的那一條
    class TemperatureError < StandardErrorattr_reader(:temperature)def initialize(temperature)@temperature = temperaturesuper("invalid temperature: #@temperature")end end

    第 23 條:捕獲可能的最具體的異常

    • 只捕獲那些你知道如何恢復的異常
    • 當捕獲異常時,首先處理最特殊的類型。在異常的繼承關系中位置越高的,越應該排在 rescue 鏈的后面
    • 避免捕獲如 StandardError 這樣的通用異常。如果你已經這么做了,就應該想想你真正想做的是不是可以通過 ensure 語句來實現
    • 在異常發生的情況下,從 resuce 語句中拋出的異常將會替換當前異常并離開當前的作用域

    第 24 條:通過塊和 ensure 管理資源

    • 通過 ensure 語句來釋放任何已獲得的資源
    • 通過在類方法上使用塊和 ensure 語句將資源管理的邏輯抽離出來
    • 確保 ensure 語句中使用的變量已經被初始化過了

    第 25 條:通過臨近的 end 退出 ensure 語句

    • 避免在 ensure 語句中顯式使用 return 語句,這意味著方法體內存在著某些錯誤的邏輯
    • 同樣,不要在 ensure 語句中直接使用 throw,你應該將 throw 放在方法主體內
    • 當執行迭代時,不要在 ensure 語句中執行 next 或 break。仔細想想在迭代內到底需不需要 begin 塊。將關系反轉或許更加合理,就是將迭代放在 begin 塊中
    • 一般來說,不要再 ensure 語句中改變控制流,在 rescue 語句中完成這樣的工作,你的意圖會更加清晰

    第 26 條:限制 retry 次數,改變重試頻率并記錄異常信息

    • 永遠不要無條件 retry,要把它看做代碼中的隱式循環;在代碼塊的外圍定義重試次數,當超出最大重試次數時重新拋出異常
    • retry 時記錄具有審計作用的異常信息,如果重試有問題的代碼解決不了問題,需要追根溯源地去了解異常是如何發生的
    • 當在 retry 之前使用延時時,需要考慮增加延時避免加劇問題

    第 27 條:throw 比 raise 更適合用來跳出作用域

    • 在復雜的流程控制中,可以考慮使用 throw 和 raise,這種方法一個額外的好處是可以把一個對象傳遞到上層調用棧并作為 catch 的最終返回值
    • 盡量使用簡單的方法來控制程序結果,可以通過方法調用和 return 重寫 catch 和 throw

    第五章:元編程

    第 28 條:熟悉 Ruby 模塊和類的鉤子方法

    • 所有的鉤子方法都需要被定義為單例方法
    • 添加、刪除、取消定義方法的鉤子方法參數是方法名,而不是類名,如果需要,使用 self 去獲取類的信息
    • 定義 singleton_method_added 會出發自身
    • 不要覆蓋 extend_object、append_features 和 prepend_features 方法,使用 extended、included 和 prepended 替代

    第 29 條:在類的鉤子方法中執行 super 方法

    • 在類的鉤子方法中執行 super 方法

    第 30 條:推薦使用 define_method 而非 method_missing

    • define_method 優于 method_missing
    • 如果必須使用 method_missing,最好也定義 respond_to_missing? 方法

    第 31 條:了解不同類型的 eval 間的差異

    • 使用 instance_eval 和 instance_exec 定義的單例方法
    • class_eval、module_eval、class_exec 和 module_exec 方法只可以被模塊或者方法使用。通過這些定義的方法都是實例方法

    第 32 條:慎用猴子補丁

    • 盡管 refinement 已經不再是實驗性的功能,它仍然有可能被修改得更加成熟
    • 在不同的語法作用域,在使用 refinement 之前必須先激活它

    第 33 條:使用別名鏈執行被修改的方法

    • 在設置別名鏈時,需要確保別名是獨一無二的
    • 必要的時候要考慮提供一個撤銷別名鏈的方法

    第 34 條:支持多種 Proc 參數數量

    • 與弱 Proc 對象不同,在參數數量不匹配時,強 Proc 對象會拋出 ArgumentError 異常
    • 可以使用 Proc#arity 方法得到 Proc 期望的參數數量,如果返回的是正數,則意味著有多少參數是必須的。如果返回的是負數,則意味著 Proc 有些參數是可選的,可以通過 "~" 來得到有多少是必須參數

    第 35 條:使用模塊前置時請謹慎思考

    • prepend 方法在使用時對類體系機構的影響是:它將模塊插入到接受者之前。這和 include 方法有很大不同:include 則是將模塊插入到接受者和其超類之間
    • 與 included 和 extended 模塊鉤子一樣,前置模塊也會出發 prepended 鉤子

    第六章:測試

    第 36 條:熟悉單元測試工具 MiniTest

    • 測試方法需要以 "test_" 作為前綴
    • 簡短的測試更容易理解,也更容易維護
    • 使用合適的斷言方法生成更易讀的出錯信息
    • 斷言(Assertion)和反演(refutation)的文檔在 MiniTest::Assertions 中

    第 37 條:熟悉 MiniTest 的需求測試

    • 使用 describe 方法創建測試類,使用 it 定義測試用例
    • 雖然在需求說明測試中,斷言仍然可用,但是更推薦使用注入到 Object 中的期望方法
    • 在 MiniTest::Expectations 模塊中,可以找到關于期望方法更詳細的文檔

    第 38 條:使用 Mock 模擬特定對象

    • 使用 Mock 來隔離外部系統的不穩定因素
    • Mock 或者替換沒有被測試過得方法,有可能會讓這些被 Mock 的代碼在生產環境中出現問題
    • 請確保在測試方法代碼的最后調用了 MiniTest::Mock#verity 方法

    第 39 條:力爭代碼被有效測試過

    • 使用模糊測試和屬性測試工具,幫助測試代碼的快樂路徑和異常路徑。
    • 測試覆蓋率工具會給你一種虛假的安全感,因為被執行過的代碼不代表這行代碼是正確的
    • 在編寫特性的同時就加上測試,會讓測試容易得多
    • 在你開始尋找導致 bug 的根本原因之前,先寫一個針對該 bug 的測試
      盡可能多地自動化你的測試

    第七章:工具與庫

    第 40 條:學會使用 Ruby 文檔

    • ri 工具用來讀取文檔,rdoc 工具用來生成文檔
    • 使用命令行選項 "-d doc" 來為 RI 工具制定在 "doc" 路徑下查找文檔
      運行 rdoc 時,后面跟上命令行選項 "-f ri" 來為 RI 工具生成文檔。另外,用 "-f darkfish" 來生成 HTML 格式的文檔(自己測試過..對于大型項目生成的 HTML 文檔不是很友好..)
    • 完整的 RDoc 文檔可以在 RDoc::Markup 類中找到(使用 RI 查閱)

    第 41 條:認識 IRB 的高級特性

    • 在 IRB::ExtendCommandBundle 模塊,或者一個會被引入 IRB::ExtendCommandBundle 中的模塊中自定義 IRB 命令
    • 利用下劃線變量("")來獲取上一個表達式的結果(例如,last_elem =?)
    • irb 命令可以用來創建一個新的會話,并將當前的評估上下文改變成任意對象
      考慮 Pry gem 作為 IRB 的替代品

    第 42 條:用 Bundler 管理 Gem 依賴

    • 在加載完 Bundler 之后,使用 Bundler.require 會犧牲一點點靈活性,但是可以加載 Gemfile 中所有的 gem
    • 當開發應用時,在 Gemfile 中列出所有的 gem,然后把 Gemfile.lock 添加到版本控制系統中
    • 當打包 RubyGem,在 gem 規格文件中列出 gem 所有依賴,但不要把 Gemfile.lock 添加到你的版本系統中

    第 43 條:為 Gem 依賴設定版本上限

    • 忽略掉版本上限需求相當于你說了你可以支持未來所有的版本
    • 相對于悲觀版本操作符,更加傾向于使用明確的版本范圍
    • 當公布發布一個 gem 時,指明依賴包的版本限制要求,在安全的范圍內越寬越好,上限可以擴展到下一個主要發布版本之前

    第八章:內存管理與性能

    第 44 條:熟悉 Ruby 的垃圾收集器

    擴展閱讀:
    Ruby GC 自述 · Ruby China?
    Ruby 2.1:RGenGC

    垃圾收集器是個復雜的軟件工程。從很高的層次看,Ruby 垃圾收集器使用一種被稱為?標記-清除(mark and sweep)的過程。(熟悉 Java 的童鞋應該會感到一絲熟悉)

    首先,遍歷對象圖,能被訪問到的對象會被標記為存活的。接著,任何未在第一階段標記過的對象會被視為垃圾并被清楚,之后將內存釋放回 Ruby 或操作系統。

    遍歷整個對象圖并標記可訪問對象的開銷太大。Ruby 2.1 通過新的分代式垃圾收集器對性能進行了優化。對象被分為兩類,年輕代和年老代。

    分代式垃圾收集器基于一個前提:大多數對象的生存時間都不會很長。如果我們知道了一個對象可以存活很久,那么就可以優化標記階段,自動將這些老的對象標記為可訪問,而不需要遍歷整個對象圖。

    如果年輕代對象在第一階段的標記中存活了下來,那么 Ruby 的分代式垃圾收集器就把它們提升為年老代。也就是說,他們依然是可訪問的。

    在年輕代對象和年老代對象的概念下,標記階段可以分為兩種模式:主要標記階段(major)和次要標記階段(minor)。

    在主要標記階段,所有的對象(無論新老)都會被標記。該模式下,垃圾收集器不區分新老兩代,所以開銷很大。

    次要標記階段,僅僅考慮年輕代對象,并自動標記年老代對象,而不檢查能否被訪問。這意味著年老代對象只會在主要標記階段之后才會被清除。除非達到了一些閾值,保證整個過程全部作為主要標記之外,垃圾收集器傾向于使用次要標記。

    垃圾收集器的清除階段也有優化機制,分為兩種模式:即使模式和懶惰模式。

    在即使模式中,垃圾收集器會清除所有的未標記的對象。如果有很多對象需要被釋放,那這種模式開銷就很大。

    因此,清除階段還支持懶惰模式,它將嘗試釋放盡可能少的對象。

    每當 Ruby 中創建一個新對象時,它可能嘗試觸發一次懶惰清除階段,去釋放一些空間。為了更好的理解這一點,我們需要看看垃圾收集器如何管理存儲對象的內存。(簡單概括:垃圾收集器通過維護一個由頁組成的堆來管理內存。頁又由槽組成。每個槽存儲一個對象。)

    我們打開一個新的 IRB 會話,運行如下命令:

    `IRB``>?``GC``.stat``---> {``:count``=>``9``,?``:heap_length``=>``126``, ...}`

    GC::stat 方法會返回一個散列,包含垃圾收集器相關的所有信息。請記住,該散列中的鍵以及它們對應垃圾收集器的意義可能在下一個版本發生變化。

    好了,讓我們來看一些有趣的鍵:

    鍵名說明
    count垃圾收集器運行的總次數
    major_gc_count主要模式下的運行次數
    minor_gc_count次要模式下的運行次數
    total_allocated_object程序開始時分配的對象總數
    total_freed_objectRuby 釋放的對象總數。與上面之差表示存活對象的數量,這可以通過 heap_live_slot 鍵來計算
    heap_length當前堆中的頁數
    heap_live_slot 和 heap_free_slot表示全部頁中被使用的槽數和未被使用的槽數
    old_object年老代的對象數量,在次要標記階段不會被處理。年輕代的對象數量可以用 heap_live_slot 減去 old_object 來獲得

    該散列中還有幾個有趣的數字,但在介紹之前,讓我們來學習垃圾收集器的最后一個要點。還記得對象是存在槽中的吧。Ruby 2.1 的槽大小為 40 字節,然而并不是所有的對象都是這么大。

    比如,一個包含 255 個字節的字符串對象。如果對象的大小超過了槽的大小,Ruby 就會額外向操作系統申請一塊內存。

    當對象被銷毀,槽被釋放后,Ruby 會把多余的內存還給操作系統。現在讓我們看看 GC::stat 散列中的這些鍵:

    鍵名說明
    malloc_increase所有超過槽大小的對象所占用的總比特數
    malloc_limit閾值。如果 malloc_increase 的大小超過了 malloc_limit,垃圾收集器就會在次要模式下運行。一個 Ruby 應用程序的生命周期里,malloc_limit 是被動調整的。它的大小是當前 malloc_increase 的大小乘以調節因子,這個因子默認是 1.4。你可以通過環境變量 RUBY_GC_MALLOC_LIMIT_GROWTH_FACTOR 來設定這個因子
    oldmalloc_increase 和 oldmalloc_limit是上面兩個對應的年老代值。如果 oldmalloc_increase 的大小超過了 oldmalloc_limit,垃圾收集器就會在主要模式下運行。oldmalloc_limit 的調節因子more是 1.2。通過環境變量 RUBY_GC_OLDMALLOC_LIMIT_GROWTH_FACTOR 可以設定它

    作為最后一部分,讓我們來看針對特定應用程序進行垃圾收集器調優的環境變量。

    在下一個版本的 Ruby 中,GC::stat 散列中的值對應的環境變量可能會發生變化。好消息是 Ruby 2.2 將支持 3 個分代,Ruby 2.1 只支持兩個。這可能會影響到上述變量的設定。

    有關垃圾收集器調優的環境變量的權威信息保存在 "gc.c" 文件中,是 Ruby 源程序的一部分。

    下面是 Ruby 2.1 中用于調優的環境變量(僅供參考):

    環境變量名說明
    RUBY_GC_HEAP_INIT_SLOTS初始槽的數量。默認為 10k,增加它的值可以讓你的應用程序啟動時減少垃圾收集器的工作效率
    RUBY_GC_HEAP_FREE_SLOTS垃圾收集器運行后,空槽數量的最小值。如果空槽的數量小于這個值,那么 Ruby 會申請額外的頁,并放入堆中。默認值是 4096
    RUBY_GC_HEAP_GROWTH_FACTOR當需要額外的槽時,用于計算需要增加的頁數的乘數因子。用已使用的頁數乘以這個因子算出還需要增加的頁數、默認值是 1.8
    RUBY_GC_HEAP_GROWTH_MAX_SLOTS一次添加到堆中的最大槽數。默認值是0,表示沒有限制。
    RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR用于計算出發主要模式垃圾收集器的門限值的乘數因子。門限由前一次主要清除后年老代對象數量乘以該因子得到。該門限與當前年老代對象數量成比例。默認值是 2.0。這意味著如果年老代對象在上次主要標記階段過后的數量翻倍的話,新一輪的主要標記過程將被出發。
    RUBY_GC_MALLOC_LIMITGC::stat 散列中 malloc_limit 的最小值。如果 malloc_increase 超過了 malloc_limit 的值,那么次要模式垃圾收集器就會運行一次。該設定用于確保 malloc_increase 不會小于特定值。它的默認值是 16 777 216(16MB)
    RUBY_GC_MALOC_LIMIT_MAX與?RUBY_GC_MALLOC_LIMIT 相反的值,這個設定保證 malloc_limit 不會變得太高。它可以被設置成 0 來取消上限。默認值是 33 554 432(32MB)
    RUBY_GC_MALLOC_LIMIT_GROWTH_FACTOR控制 malloc_limit 如何增長的乘數因子。新的 malloc_limit 值由當前 malloc_limit 值乘以這個因子來獲得,默認值為 1.4
    RUBY_GC_OLDMALLOC_LIMIT年老代對應的 RUBY_GC_MALLOC_LIMIT 值。默認值是?16 777 216(16MB)
    RUBY_GC_OLDMALLOC_LIMIT_MAX年老代對應的 RUBY_GC_MALLOC_LIMIT_MAX 值。默認值是 134 217 728(128MB)
    RUBY_GC_OLDMALLOC_LIMIT_GROWTH_FACTOR年老代對應的 RUBY_GC_MALLOC_LIMIT_GROWTH_FACTOR 值。默認值是 1.2

    第 45 條:用 Finalizer 構建資源安全網

    • 最好使用 ensure 子句來保護有限的資源。
    • 如果必須要在 ensure 子句外報錄一個資源(resource),那么就給它創建一個 finalizer(終結方法)
    • 永遠不要再這樣一個綁定中創建 finalizer Proc,該綁定引用了一個注定會被銷毀的對象,這會造成垃圾收集器無法釋放該對象
    • 記住,finalizer 可能在一個對象銷毀后以及程序終止前的任何時間被調用

    第 46 條:認識 Ruby 性能分析工具

    • 在修改性能差的代碼之前,先使用性能分析工具收集性能相關的信息。
    • 在 ruby-prof gem 和 Ruby 自帶的標準 profile 庫之間,選擇前者,因為前者更快而且可以提供多種不同的報告。
    • 如果使用 Ruby 2.1 或者更新的版本,應該考慮使用 stackprof gem 和 memory_profiler gem。

    第 47 條:避免在循環中使用對象字面量

    • 將循環中的不會變化的對象字面量變成常量。
    • 在 Ruby 2.1 及更高的版本中凍結字符串字面量,相當于把它作為常量,可以被整個運行程序共享。

    第 48 條:考慮記憶化大開銷計算

    • 考慮提供一個方法通過將緩存的變量職位 nil 來重置記憶化。
    • 確保時鐘認真考慮過這些由記憶化而跳過副作用所導致的后果。
    • 如果不希望調用者修改緩存的變量,那應該考慮讓被記憶化的方法返回凍結對象。
    • 先用工具分析程序的性能,再考慮是否需要記憶化。

    總結

    周末學習了兩天才勉強看完了一遍,對于 Ruby 語言的有一些高級特性還是比較吃力的,需要自己反反復復的看才能理解一二。不過好在也是有收獲吧,沒有白費自己的努力,特地總結一個精簡版方便后面的童鞋學習。

    另外這篇文章最開始是使用公司的文檔空間創建的,發現 Markdown 雖然精簡易于使用,但是功能性上比一些成熟的寫文工具要差上很多,就比如對代碼的支持吧,用公司的代碼塊還支持自定義標題、顯示行號、是否能縮放、主題等一系列自定義的東西,寫出來的東西也更加友好...


    按照慣例黏一個尾巴:

    歡迎轉載,轉載請注明出處!
    簡書ID:@我沒有三顆心臟
    github:wmyskxz

    《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的《Effective-Ruby》读书笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    亚洲人亚洲人成电影网站色 | 久久zyz资源站无码中文动漫 | 亚洲精品午夜国产va久久成人 | 成人试看120秒体验区 | 精品国产福利一区二区 | 欧美肥老太牲交大战 | 国内精品九九久久久精品 | 国产色在线 | 国产 | 国产三级久久久精品麻豆三级 | 久久亚洲日韩精品一区二区三区 | 国精产品一区二区三区 | 奇米影视888欧美在线观看 | 激情五月综合色婷婷一区二区 | 97人妻精品一区二区三区 | 久久国产精品萌白酱免费 | 久久精品人人做人人综合试看 | 无码人妻丰满熟妇区毛片18 | 亚洲精品午夜国产va久久成人 | 对白脏话肉麻粗话av | 精品亚洲韩国一区二区三区 | 中文字幕无线码 | 日本大乳高潮视频在线观看 | 中国女人内谢69xxxxxa片 | 少妇人妻偷人精品无码视频 | 精品无码成人片一区二区98 | 丰满肥臀大屁股熟妇激情视频 | 国产高清av在线播放 | 久久久久久国产精品无码下载 | 亚洲熟妇色xxxxx欧美老妇 | 国产精品爱久久久久久久 | 久久久久成人精品免费播放动漫 | 国产疯狂伦交大片 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 免费无码午夜福利片69 | 欧美人与禽zoz0性伦交 | 欧美一区二区三区视频在线观看 | 人妻有码中文字幕在线 | 色综合久久久久综合一本到桃花网 | 俺去俺来也在线www色官网 | 撕开奶罩揉吮奶头视频 | 久久久无码中文字幕久... | 国产极品美女高潮无套在线观看 | 日本精品高清一区二区 | 亚洲日韩乱码中文无码蜜桃臀网站 | 大胆欧美熟妇xx | 国精产品一品二品国精品69xx | 无码毛片视频一区二区本码 | 亚洲 另类 在线 欧美 制服 | 夜先锋av资源网站 | 蜜桃视频韩日免费播放 | 无码av免费一区二区三区试看 | 双乳奶水饱满少妇呻吟 | 中文字幕无线码 | 国产成人无码区免费内射一片色欲 | 大地资源中文第3页 | 久久亚洲日韩精品一区二区三区 | 麻豆果冻传媒2021精品传媒一区下载 | 人人超人人超碰超国产 | 亚洲区欧美区综合区自拍区 | 女人高潮内射99精品 | 国产精品鲁鲁鲁 | 亚洲爆乳精品无码一区二区三区 | 国产激情综合五月久久 | 中文字幕 亚洲精品 第1页 | 67194成是人免费无码 | 国产真实乱对白精彩久久 | 一区二区三区高清视频一 | 成熟女人特级毛片www免费 | 少妇太爽了在线观看 | 又大又硬又黄的免费视频 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 好爽又高潮了毛片免费下载 | 亚洲娇小与黑人巨大交 | 88国产精品欧美一区二区三区 | 亚洲一区二区三区无码久久 | 牛和人交xxxx欧美 | 欧美国产日韩久久mv | 午夜精品久久久久久久久 | 国产一精品一av一免费 | 亚洲熟妇色xxxxx欧美老妇 | 在线a亚洲视频播放在线观看 | 99精品视频在线观看免费 | 久久久久成人片免费观看蜜芽 | 在线观看欧美一区二区三区 | 欧美猛少妇色xxxxx | 暴力强奷在线播放无码 | 国产精品亚洲五月天高清 | 色婷婷av一区二区三区之红樱桃 | 老司机亚洲精品影院 | 亚洲狠狠色丁香婷婷综合 | 亚洲毛片av日韩av无码 | 午夜无码人妻av大片色欲 | 国产亚洲精品久久久久久 | 人妻互换免费中文字幕 | 99久久久无码国产aaa精品 | 日韩av激情在线观看 | 日日橹狠狠爱欧美视频 | 中文字幕 亚洲精品 第1页 | 麻豆人妻少妇精品无码专区 | 久久精品国产亚洲精品 | 99久久婷婷国产综合精品青草免费 | 国产人成高清在线视频99最全资源 | 夜夜影院未满十八勿进 | 中文无码成人免费视频在线观看 | 日本又色又爽又黄的a片18禁 | www一区二区www免费 | 亚洲一区二区三区无码久久 | 麻豆国产丝袜白领秘书在线观看 | 一区二区三区高清视频一 | 国产成人无码a区在线观看视频app | 日产精品99久久久久久 | 色综合久久久无码中文字幕 | 国产av人人夜夜澡人人爽麻豆 | 久久久久免费精品国产 | 亚洲色欲色欲欲www在线 | 亚洲熟熟妇xxxx | 欧美黑人巨大xxxxx | 亚洲熟悉妇女xxx妇女av | 国产绳艺sm调教室论坛 | 国内老熟妇对白xxxxhd | 国产精品毛多多水多 | 无码国模国产在线观看 | 自拍偷自拍亚洲精品10p | 狠狠噜狠狠狠狠丁香五月 | 日日橹狠狠爱欧美视频 | 国产乱码精品一品二品 | 成在人线av无码免费 | 久久成人a毛片免费观看网站 | 亚洲精品美女久久久久久久 | 超碰97人人做人人爱少妇 | 一本久道高清无码视频 | 欧美放荡的少妇 | 麻豆国产丝袜白领秘书在线观看 | 青青青手机频在线观看 | 天下第一社区视频www日本 | av无码久久久久不卡免费网站 | 国产国语老龄妇女a片 | 激情内射亚州一区二区三区爱妻 | 狠狠亚洲超碰狼人久久 | 久久久久久亚洲精品a片成人 | 男女猛烈xx00免费视频试看 | 在线а√天堂中文官网 | 我要看www免费看插插视频 | 久久人人爽人人爽人人片ⅴ | 欧美自拍另类欧美综合图片区 | 3d动漫精品啪啪一区二区中 | 亚洲国产欧美国产综合一区 | 日本xxxx色视频在线观看免费 | 久久成人a毛片免费观看网站 | 国产黄在线观看免费观看不卡 | 久久久久久a亚洲欧洲av冫 | 中文字幕 亚洲精品 第1页 | 国产午夜手机精彩视频 | 欧美 日韩 人妻 高清 中文 | 国产高清av在线播放 | 久久精品国产日本波多野结衣 | 免费无码午夜福利片69 | 久久久久免费精品国产 | 久久这里只有精品视频9 | 亲嘴扒胸摸屁股激烈网站 | 无码人妻出轨黑人中文字幕 | 久久无码人妻影院 | 男人和女人高潮免费网站 | 国精产品一区二区三区 | 成人性做爰aaa片免费看不忠 | 国产又爽又猛又粗的视频a片 | 18禁止看的免费污网站 | 国产无遮挡又黄又爽又色 | 国产人妻人伦精品1国产丝袜 | 国产精品久久福利网站 | 午夜时刻免费入口 | 日本欧美一区二区三区乱码 | 欧美自拍另类欧美综合图片区 | 在线播放免费人成毛片乱码 | 日本大乳高潮视频在线观看 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 亚洲一区二区三区播放 | 久久国产精品偷任你爽任你 | 亚洲熟悉妇女xxx妇女av | 国产成人一区二区三区别 | 国产成人一区二区三区别 | 成人片黄网站色大片免费观看 | 国产成人无码av片在线观看不卡 | 麻豆国产人妻欲求不满谁演的 | 亚洲欧洲日本综合aⅴ在线 | 欧美三级a做爰在线观看 | 色偷偷人人澡人人爽人人模 | 精品久久久久久人妻无码中文字幕 | 爆乳一区二区三区无码 | 自拍偷自拍亚洲精品10p | 成人免费视频一区二区 | 国产97色在线 | 免 | 国产内射爽爽大片视频社区在线 | 国内综合精品午夜久久资源 | 国产午夜无码视频在线观看 | 亚洲人交乣女bbw | 久久国产精品偷任你爽任你 | 国产乱人偷精品人妻a片 | 欧美人与禽zoz0性伦交 | 2020最新国产自产精品 | 全黄性性激高免费视频 | 成人无码精品一区二区三区 | 东京热无码av男人的天堂 | 无码国产乱人伦偷精品视频 | 欧洲欧美人成视频在线 | 日本大乳高潮视频在线观看 | 无码午夜成人1000部免费视频 | 亚洲无人区午夜福利码高清完整版 | 欧美怡红院免费全部视频 | 国产精品无码久久av | 日本精品人妻无码77777 天堂一区人妻无码 | 欧美人与动性行为视频 | 久久99精品国产.久久久久 | 日本免费一区二区三区最新 | 波多野结衣乳巨码无在线观看 | 亚洲成在人网站无码天堂 | 国产精品亚洲一区二区三区喷水 | 久久午夜夜伦鲁鲁片无码免费 | 小sao货水好多真紧h无码视频 | 亚洲精品一区二区三区在线 | 天天拍夜夜添久久精品 | 久久精品国产大片免费观看 | 精品国偷自产在线视频 | 国产乱人伦偷精品视频 | 麻豆果冻传媒2021精品传媒一区下载 | 亚洲色偷偷男人的天堂 | 久久亚洲精品中文字幕无男同 | 国产无套内射久久久国产 | 午夜精品一区二区三区的区别 | 中文精品无码中文字幕无码专区 | 久久99精品久久久久婷婷 | 爆乳一区二区三区无码 | 久久久久久亚洲精品a片成人 | 亚洲乱码国产乱码精品精 | 久久精品人人做人人综合试看 | 天天做天天爱天天爽综合网 | 亚洲阿v天堂在线 | 色综合久久久久综合一本到桃花网 | 国产精品久久久久影院嫩草 | 77777熟女视频在线观看 а天堂中文在线官网 | 日韩精品无码免费一区二区三区 | 永久免费观看国产裸体美女 | 中文无码精品a∨在线观看不卡 | 日韩少妇白浆无码系列 | 中文字幕无码免费久久9一区9 | 成人精品视频一区二区三区尤物 | 无码帝国www无码专区色综合 | 久久久久se色偷偷亚洲精品av | 亚洲国产av精品一区二区蜜芽 | 日本一区二区更新不卡 | 性生交大片免费看女人按摩摩 | 国产高潮视频在线观看 | 无码人妻黑人中文字幕 | 国产人妻人伦精品1国产丝袜 | 亚洲日本va中文字幕 | 少妇人妻av毛片在线看 | 国语精品一区二区三区 | 国产精品二区一区二区aⅴ污介绍 | 国产又爽又黄又刺激的视频 | 国产欧美熟妇另类久久久 | 自拍偷自拍亚洲精品被多人伦好爽 | 麻豆蜜桃av蜜臀av色欲av | 亚洲小说春色综合另类 | 国产精品久久久av久久久 | 粗大的内捧猛烈进出视频 | 中文字幕乱码人妻二区三区 | 精品熟女少妇av免费观看 | 久久精品丝袜高跟鞋 | 牲交欧美兽交欧美 | 欧美第一黄网免费网站 | 日韩精品无码一本二本三本色 | 亚欧洲精品在线视频免费观看 | 水蜜桃亚洲一二三四在线 | 久久视频在线观看精品 | 久久久精品欧美一区二区免费 | аⅴ资源天堂资源库在线 | 图片区 小说区 区 亚洲五月 | 日日摸日日碰夜夜爽av | 亚洲一区二区三区含羞草 | 日本乱偷人妻中文字幕 | 人妻少妇精品视频专区 | 中文字幕无线码 | a片在线免费观看 | 5858s亚洲色大成网站www | 国产高清不卡无码视频 | 澳门永久av免费网站 | 人人妻人人澡人人爽人人精品浪潮 | 内射后入在线观看一区 | 色欲综合久久中文字幕网 | 日本精品少妇一区二区三区 | 国产又爽又黄又刺激的视频 | 亚洲精品国偷拍自产在线麻豆 | 久久精品国产大片免费观看 | 久久综合激激的五月天 | 正在播放老肥熟妇露脸 | 午夜熟女插插xx免费视频 | 亚洲一区二区三区含羞草 | 7777奇米四色成人眼影 | 九九在线中文字幕无码 | 无码人妻精品一区二区三区不卡 | 成熟女人特级毛片www免费 | 秋霞成人午夜鲁丝一区二区三区 | 国产亚洲精品久久久ai换 | 在线欧美精品一区二区三区 | 亚洲国产精品一区二区美利坚 | 久久久久久亚洲精品a片成人 | 日韩亚洲欧美中文高清在线 | 亚无码乱人伦一区二区 | 国产成人无码一二三区视频 | 免费无码肉片在线观看 | 东京热一精品无码av | 色诱久久久久综合网ywww | 国产小呦泬泬99精品 | 亚洲综合无码久久精品综合 | 国产人妻久久精品二区三区老狼 | 性色欲情网站iwww九文堂 | 97无码免费人妻超级碰碰夜夜 | 精品国产麻豆免费人成网站 | 国内丰满熟女出轨videos | 亚洲人成网站免费播放 | 水蜜桃色314在线观看 | 精品国产乱码久久久久乱码 | 日韩av无码一区二区三区不卡 | 人妻少妇精品久久 | 人妻少妇精品无码专区二区 | 欧美一区二区三区 | 伊人久久大香线蕉av一区二区 | 精品国产精品久久一区免费式 | 人人妻人人澡人人爽精品欧美 | 精品国产一区二区三区av 性色 | 中文字幕日韩精品一区二区三区 | 一个人免费观看的www视频 | 亚洲中文字幕无码中文字在线 | 人妻与老人中文字幕 | 无遮挡啪啪摇乳动态图 | 久久久久亚洲精品中文字幕 | 国产午夜精品一区二区三区嫩草 | 性做久久久久久久免费看 | 国产精品沙发午睡系列 | 东京无码熟妇人妻av在线网址 | 人妻天天爽夜夜爽一区二区 | 麻豆果冻传媒2021精品传媒一区下载 | 亚洲成色www久久网站 | 国产精品无码成人午夜电影 | 中文字幕无码免费久久99 | 欧美性生交xxxxx久久久 | 宝宝好涨水快流出来免费视频 | 久久久精品欧美一区二区免费 | 领导边摸边吃奶边做爽在线观看 | 夜夜夜高潮夜夜爽夜夜爰爰 | 熟妇人妻中文av无码 | 综合激情五月综合激情五月激情1 | 大肉大捧一进一出视频出来呀 | aa片在线观看视频在线播放 | 国产一区二区三区四区五区加勒比 | 久久精品国产一区二区三区 | 男女超爽视频免费播放 | 中文久久乱码一区二区 | 亚洲人成影院在线无码按摩店 | 5858s亚洲色大成网站www | 亚洲国产欧美在线成人 | 国产精品福利视频导航 | 女人高潮内射99精品 | 久久精品人人做人人综合 | 国产精品免费大片 | 色 综合 欧美 亚洲 国产 | 熟妇人妻无乱码中文字幕 | 欧美性黑人极品hd | 欧美黑人巨大xxxxx | 亚洲成在人网站无码天堂 | 久久久久人妻一区精品色欧美 | 中文字幕 人妻熟女 | 天堂无码人妻精品一区二区三区 | 好屌草这里只有精品 | 亚洲人成影院在线无码按摩店 | 亚洲第一无码av无码专区 | 国产精品99爱免费视频 | 正在播放东北夫妻内射 | 久久伊人色av天堂九九小黄鸭 | 1000部啪啪未满十八勿入下载 | 亚洲欧洲无卡二区视頻 | 中文字幕乱码人妻无码久久 | 丝袜人妻一区二区三区 | 国产亚洲精品精品国产亚洲综合 | 亚洲 日韩 欧美 成人 在线观看 | 老头边吃奶边弄进去呻吟 | 国精产品一区二区三区 | ass日本丰满熟妇pics | 免费观看的无遮挡av | 色五月五月丁香亚洲综合网 | 亚洲小说图区综合在线 | 成人欧美一区二区三区黑人 | 国产真人无遮挡作爱免费视频 | 伦伦影院午夜理论片 | av香港经典三级级 在线 | 中文字幕人妻无码一区二区三区 | 欧美喷潮久久久xxxxx | 少妇无码一区二区二三区 | 狠狠色丁香久久婷婷综合五月 | 久久人人爽人人爽人人片ⅴ | 国产精品久久久久无码av色戒 | 国产av剧情md精品麻豆 | 亚洲人成网站在线播放942 | 无码纯肉视频在线观看 | 精品久久综合1区2区3区激情 | 国产精品无码一区二区桃花视频 | 97人妻精品一区二区三区 | 强奷人妻日本中文字幕 | 麻豆国产97在线 | 欧洲 | 强开小婷嫩苞又嫩又紧视频 | 少妇厨房愉情理9仑片视频 | 日日鲁鲁鲁夜夜爽爽狠狠 | 国产免费久久久久久无码 | 午夜无码人妻av大片色欲 | 日日摸天天摸爽爽狠狠97 | 亚洲欧美国产精品久久 | 国产人妖乱国产精品人妖 | 久久精品人妻少妇一区二区三区 | 一区二区三区高清视频一 | 亚洲欧美日韩国产精品一区二区 | 图片区 小说区 区 亚洲五月 | 久久99热只有频精品8 | 亚洲乱码日产精品bd | 东京无码熟妇人妻av在线网址 | 中文无码成人免费视频在线观看 | 国产精品亚洲一区二区三区喷水 | 亚洲人成网站在线播放942 | 粉嫩少妇内射浓精videos | 成人无码精品1区2区3区免费看 | 小泽玛莉亚一区二区视频在线 | 丰满少妇人妻久久久久久 | 人人妻人人澡人人爽欧美一区九九 | 99精品久久毛片a片 | 97久久国产亚洲精品超碰热 | 亚洲欧洲中文日韩av乱码 | 少妇性l交大片欧洲热妇乱xxx | 俺去俺来也在线www色官网 | 日本精品高清一区二区 | 亚洲狠狠婷婷综合久久 | 国产成人精品无码播放 | 人妻少妇被猛烈进入中文字幕 | 熟妇女人妻丰满少妇中文字幕 | 成人欧美一区二区三区黑人免费 | 亚洲性无码av中文字幕 | 性欧美videos高清精品 | 丰满人妻精品国产99aⅴ | 成年女人永久免费看片 | 中文字幕日韩精品一区二区三区 | 免费国产成人高清在线观看网站 | 久久精品无码一区二区三区 | 精品人妻人人做人人爽 | 久激情内射婷内射蜜桃人妖 | 丰满少妇人妻久久久久久 | 台湾无码一区二区 | 久久精品中文字幕大胸 | 波多野结衣aⅴ在线 | 亚洲无人区一区二区三区 | 免费无码av一区二区 | 国产亚洲精品精品国产亚洲综合 | 一区二区三区高清视频一 | 国内综合精品午夜久久资源 | 性欧美牲交在线视频 | 特级做a爰片毛片免费69 | 国精产品一品二品国精品69xx | 蜜臀aⅴ国产精品久久久国产老师 | 国内精品久久毛片一区二区 | 亚洲精品成人福利网站 | 国产精品资源一区二区 | 亚洲gv猛男gv无码男同 | 人人澡人人妻人人爽人人蜜桃 | 亚洲国产精品久久久久久 | 一区二区三区乱码在线 | 欧洲 | 国产疯狂伦交大片 | aⅴ在线视频男人的天堂 | 俺去俺来也www色官网 | 亚洲精品午夜无码电影网 | 亚洲自偷自偷在线制服 | 高潮喷水的毛片 | 丰满肥臀大屁股熟妇激情视频 | 女人高潮内射99精品 | 少妇太爽了在线观看 | 爽爽影院免费观看 | 国产莉萝无码av在线播放 | 国产免费无码一区二区视频 | 午夜福利试看120秒体验区 | 人人妻在人人 | 午夜不卡av免费 一本久久a久久精品vr综合 | 国产激情精品一区二区三区 | 日韩亚洲欧美中文高清在线 | 99久久99久久免费精品蜜桃 | 欧美黑人巨大xxxxx | 四虎影视成人永久免费观看视频 | 99久久亚洲精品无码毛片 | 久久久久成人片免费观看蜜芽 | 国产成人综合在线女婷五月99播放 | 沈阳熟女露脸对白视频 | 欧美性猛交内射兽交老熟妇 | 无码国模国产在线观看 | 无套内谢的新婚少妇国语播放 | 精品午夜福利在线观看 | 日日碰狠狠丁香久燥 | 亚洲欧洲中文日韩av乱码 | 亚洲精品国产第一综合99久久 | 国产乱码精品一品二品 | 98国产精品综合一区二区三区 | 国产精品va在线播放 | 久久国语露脸国产精品电影 | 女高中生第一次破苞av | 欧美xxxx黑人又粗又长 | 国产无遮挡又黄又爽又色 | 无码人妻出轨黑人中文字幕 | 久久99精品国产.久久久久 | 午夜福利不卡在线视频 | 成人av无码一区二区三区 | 美女扒开屁股让男人桶 | 国产69精品久久久久app下载 | 人妻尝试又大又粗久久 | 夜精品a片一区二区三区无码白浆 | 国产香蕉97碰碰久久人人 | 婷婷色婷婷开心五月四房播播 | 欧美熟妇另类久久久久久不卡 | 亚洲国产精品无码久久久久高潮 | 天海翼激烈高潮到腰振不止 | 无码国产色欲xxxxx视频 | 国产网红无码精品视频 | 国产人妖乱国产精品人妖 | 在线天堂新版最新版在线8 | 久久久久久久人妻无码中文字幕爆 | 亚洲色偷偷男人的天堂 | 国产亚洲精品久久久久久国模美 | 精品国产成人一区二区三区 | 人妻少妇精品视频专区 | 高清国产亚洲精品自在久久 | 亚洲人成网站免费播放 | 国产精品高潮呻吟av久久4虎 | 免费观看又污又黄的网站 | 午夜性刺激在线视频免费 | 秋霞特色aa大片 | 少妇太爽了在线观看 | 丝袜足控一区二区三区 | 国产精品久久久久久无码 | 内射后入在线观看一区 | 日韩亚洲欧美中文高清在线 | 女高中生第一次破苞av | 国产女主播喷水视频在线观看 | 日韩人妻无码中文字幕视频 | 美女毛片一区二区三区四区 | 桃花色综合影院 | 中文精品久久久久人妻不卡 | 性欧美牲交xxxxx视频 | 丰满护士巨好爽好大乳 | 国内揄拍国内精品人妻 | 亚拍精品一区二区三区探花 | 精品亚洲韩国一区二区三区 | 国产艳妇av在线观看果冻传媒 | 亚洲成av人片天堂网无码】 | 欧美丰满熟妇xxxx | 一个人免费观看的www视频 | 精品国产麻豆免费人成网站 | 98国产精品综合一区二区三区 | 无码av岛国片在线播放 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 中文精品无码中文字幕无码专区 | 麻豆av传媒蜜桃天美传媒 | 四虎国产精品免费久久 | 国内揄拍国内精品人妻 | 丰满岳乱妇在线观看中字无码 | 黑人玩弄人妻中文在线 | 国产精品免费大片 | 亚洲国产精品久久久久久 | 亚洲成av人片在线观看无码不卡 | 女人被男人躁得好爽免费视频 | 激情人妻另类人妻伦 | 婷婷色婷婷开心五月四房播播 | 99在线 | 亚洲 | 日日摸夜夜摸狠狠摸婷婷 | 色综合久久久无码网中文 | 国产综合色产在线精品 | 狂野欧美性猛交免费视频 | 无码人妻精品一区二区三区不卡 | 久久亚洲中文字幕无码 | 欧美zoozzooz性欧美 | 人妻无码久久精品人妻 | 国产亚洲欧美日韩亚洲中文色 | 午夜无码区在线观看 | 国产精品成人av在线观看 | 免费观看又污又黄的网站 | 国精品人妻无码一区二区三区蜜柚 | 动漫av一区二区在线观看 | 国产综合在线观看 | 亚洲无人区午夜福利码高清完整版 | 97资源共享在线视频 | 国产深夜福利视频在线 | 亚洲国产av美女网站 | 小sao货水好多真紧h无码视频 | 国产精品沙发午睡系列 | 乱人伦人妻中文字幕无码久久网 | 国产精品视频免费播放 | 樱花草在线社区www | 无码帝国www无码专区色综合 | 无码毛片视频一区二区本码 | 日韩亚洲欧美精品综合 | 亚洲色www成人永久网址 | 九九在线中文字幕无码 | 午夜丰满少妇性开放视频 | 人人澡人人妻人人爽人人蜜桃 | 男女超爽视频免费播放 | 帮老师解开蕾丝奶罩吸乳网站 | aⅴ在线视频男人的天堂 | 日日天干夜夜狠狠爱 | 人人澡人摸人人添 | 亚洲欧美中文字幕5发布 | 国产av人人夜夜澡人人爽麻豆 | 国产性生交xxxxx无码 | 色欲av亚洲一区无码少妇 | 国产精品无码一区二区桃花视频 | 日韩欧美群交p片內射中文 | 在线天堂新版最新版在线8 | 少妇高潮喷潮久久久影院 | 荫蒂被男人添的好舒服爽免费视频 | 丁香啪啪综合成人亚洲 | 成人无码视频在线观看网站 | 激情内射日本一区二区三区 | 中文字幕无码热在线视频 | 亚洲精品无码人妻无码 | 亚洲午夜久久久影院 | 青青草原综合久久大伊人精品 | 少妇人妻偷人精品无码视频 | 2019午夜福利不卡片在线 | 桃花色综合影院 | 无码人妻久久一区二区三区不卡 | 成人欧美一区二区三区 | 亚洲爆乳精品无码一区二区三区 | 又大又黄又粗又爽的免费视频 | 欧美激情内射喷水高潮 | 三级4级全黄60分钟 | 人妻少妇精品无码专区动漫 | 欧美怡红院免费全部视频 | 国产亚洲欧美日韩亚洲中文色 | 亚洲成av人在线观看网址 | 国产三级久久久精品麻豆三级 | 国产综合久久久久鬼色 | 在线播放亚洲第一字幕 | 亚洲色大成网站www | 国产精品沙发午睡系列 | 亚洲а∨天堂久久精品2021 | 中文字幕无码视频专区 | 国产精品久久久午夜夜伦鲁鲁 | 综合激情五月综合激情五月激情1 | 久久人人爽人人爽人人片av高清 | 国产成人无码一二三区视频 | 欧美xxxxx精品 | 伊人久久大香线焦av综合影院 | 精品久久久中文字幕人妻 | 日欧一片内射va在线影院 | 日本一卡二卡不卡视频查询 | 成人影院yy111111在线观看 | 国产国产精品人在线视 | 国产精品99久久精品爆乳 | 午夜福利不卡在线视频 | 久久久成人毛片无码 | 鲁鲁鲁爽爽爽在线视频观看 | 欧美亚洲日韩国产人成在线播放 | 99精品国产综合久久久久五月天 | 午夜福利电影 | 国产精品第一区揄拍无码 | 黑人巨大精品欧美一区二区 | 日韩精品无码一本二本三本色 | 鲁一鲁av2019在线 | 亚洲高清偷拍一区二区三区 | 精品aⅴ一区二区三区 | 熟女体下毛毛黑森林 | 欧美国产日韩久久mv | 亚洲成色www久久网站 | 奇米影视7777久久精品 | 人妻尝试又大又粗久久 | 18禁黄网站男男禁片免费观看 | 2020久久香蕉国产线看观看 | 国产激情一区二区三区 | 精品 日韩 国产 欧美 视频 | 欧美人与善在线com | 国产乱人伦偷精品视频 | 欧美兽交xxxx×视频 | 国产亚洲人成在线播放 | 人人超人人超碰超国产 | 国产激情无码一区二区 | 少妇人妻大乳在线视频 | 久久久久se色偷偷亚洲精品av | 欧美怡红院免费全部视频 | 无套内谢的新婚少妇国语播放 | 久久久国产精品无码免费专区 | 精品国产乱码久久久久乱码 | 亚洲综合伊人久久大杳蕉 | 亚洲色欲久久久综合网东京热 | 国产人妻大战黑人第1集 | 又大又黄又粗又爽的免费视频 | 国产莉萝无码av在线播放 | 99麻豆久久久国产精品免费 | 婷婷色婷婷开心五月四房播播 | yw尤物av无码国产在线观看 | 中文字幕无码免费久久99 | 一个人免费观看的www视频 | 色综合久久久无码网中文 | 亚洲成在人网站无码天堂 | 欧美黑人巨大xxxxx | 又黄又爽又色的视频 | 国产精品人人爽人人做我的可爱 | 狠狠综合久久久久综合网 | 亚洲精品中文字幕 | 亚洲综合无码久久精品综合 | 国产成人精品一区二区在线小狼 | 人妻人人添人妻人人爱 | 精品一区二区三区无码免费视频 | 国内精品九九久久久精品 | 荫蒂被男人添的好舒服爽免费视频 | 国内精品人妻无码久久久影院 | 午夜性刺激在线视频免费 | 国产精品无码久久av | 好爽又高潮了毛片免费下载 | 十八禁真人啪啪免费网站 | 国产激情无码一区二区 | 日日天日日夜日日摸 | 亚洲成色在线综合网站 | 免费人成在线观看网站 | 98国产精品综合一区二区三区 | 国产艳妇av在线观看果冻传媒 | 国产真实夫妇视频 | 成年美女黄网站色大免费全看 | 亚洲熟熟妇xxxx | 亚洲精品鲁一鲁一区二区三区 | 久久综合狠狠综合久久综合88 | 免费中文字幕日韩欧美 | 99久久精品午夜一区二区 | 国产激情精品一区二区三区 | 国产午夜精品一区二区三区嫩草 | 77777熟女视频在线观看 а天堂中文在线官网 | 骚片av蜜桃精品一区 | 精品偷拍一区二区三区在线看 | 国产激情精品一区二区三区 | 午夜性刺激在线视频免费 | 国产亚洲精品久久久ai换 | 十八禁真人啪啪免费网站 | 国产激情艳情在线看视频 | 成人毛片一区二区 | 青草视频在线播放 | 国产精品无码久久av | 乱人伦人妻中文字幕无码久久网 | 欧美大屁股xxxxhd黑色 | 无码午夜成人1000部免费视频 | 国产欧美精品一区二区三区 | 久久精品人人做人人综合 | 男人扒开女人内裤强吻桶进去 | 无码午夜成人1000部免费视频 | 亚洲精品国产a久久久久久 | 人人妻人人澡人人爽精品欧美 | 男女爱爱好爽视频免费看 | 欧美成人高清在线播放 | 日日噜噜噜噜夜夜爽亚洲精品 | 国产亚av手机在线观看 | 伊人久久大香线蕉亚洲 | 亲嘴扒胸摸屁股激烈网站 | av无码电影一区二区三区 | 日韩人妻无码中文字幕视频 | 欧洲欧美人成视频在线 | 正在播放东北夫妻内射 | 色妞www精品免费视频 | 成在人线av无码免费 | 国产av无码专区亚洲a∨毛片 | 久久无码人妻影院 | 久久久久久a亚洲欧洲av冫 | 丰满肥臀大屁股熟妇激情视频 | 国产香蕉97碰碰久久人人 | 樱花草在线播放免费中文 | 日韩无码专区 | 中国女人内谢69xxxxxa片 | 久久国产36精品色熟妇 | 国产熟妇另类久久久久 | 乌克兰少妇xxxx做受 | 久久精品中文字幕一区 | 熟女少妇人妻中文字幕 | 秋霞特色aa大片 | 中文字幕亚洲情99在线 | 两性色午夜视频免费播放 | 思思久久99热只有频精品66 | 亚洲精品成a人在线观看 | 中文字幕人妻无码一区二区三区 | 国语自产偷拍精品视频偷 | 国产又爽又黄又刺激的视频 | 久久亚洲精品成人无码 | 亚洲男人av香蕉爽爽爽爽 | 无码人妻丰满熟妇区五十路百度 | 国产精品国产自线拍免费软件 | 亚洲国产精华液网站w | 又湿又紧又大又爽a视频国产 | 精品人人妻人人澡人人爽人人 | 性啪啪chinese东北女人 | 大肉大捧一进一出视频出来呀 | 久久久久av无码免费网 | 亚洲国产精品美女久久久久 | 久久精品国产一区二区三区肥胖 | 97夜夜澡人人爽人人喊中国片 | 日日躁夜夜躁狠狠躁 | 丰满少妇熟乱xxxxx视频 | 99精品国产综合久久久久五月天 | 国内精品一区二区三区不卡 | 久久天天躁夜夜躁狠狠 | 77777熟女视频在线观看 а天堂中文在线官网 | 在线观看欧美一区二区三区 | 亚洲国产综合无码一区 | 久久亚洲中文字幕无码 | 97人妻精品一区二区三区 | 亚洲色大成网站www | 狠狠色丁香久久婷婷综合五月 | 影音先锋中文字幕无码 | 国语精品一区二区三区 | 亚洲一区二区观看播放 | 天天躁日日躁狠狠躁免费麻豆 | 欧美成人午夜精品久久久 | 无码人妻精品一区二区三区不卡 | 一二三四在线观看免费视频 | 日本乱人伦片中文三区 | 色一情一乱一伦一区二区三欧美 | 青草视频在线播放 | 蜜桃视频插满18在线观看 | 国产精品久久久一区二区三区 | 麻豆国产人妻欲求不满谁演的 | 国产香蕉尹人综合在线观看 | 丁香花在线影院观看在线播放 | 国产在线精品一区二区三区直播 | 国产内射爽爽大片视频社区在线 | 欧美成人高清在线播放 | 欧美 亚洲 国产 另类 | 人人妻人人澡人人爽人人精品浪潮 | 成人试看120秒体验区 | 51国偷自产一区二区三区 | 国产精品无码mv在线观看 | 久久午夜夜伦鲁鲁片无码免费 | 亚洲国产高清在线观看视频 | 精品人人妻人人澡人人爽人人 | 亚洲色在线无码国产精品不卡 | 亚洲一区二区三区四区 | 成年女人永久免费看片 | 午夜理论片yy44880影院 | 18黄暴禁片在线观看 | 一个人看的www免费视频在线观看 | 国产欧美精品一区二区三区 | 亚洲精品无码人妻无码 | 一本无码人妻在中文字幕免费 | 成人无码精品1区2区3区免费看 | 午夜福利试看120秒体验区 | 成 人 网 站国产免费观看 | 少妇人妻大乳在线视频 | 久久久婷婷五月亚洲97号色 | 亚洲精品久久久久avwww潮水 | 亚洲呦女专区 | 国产深夜福利视频在线 | 久久精品国产大片免费观看 | 亚洲 a v无 码免 费 成 人 a v | 国产亚洲欧美在线专区 | 曰韩无码二三区中文字幕 | 久久久精品456亚洲影院 | 东京热无码av男人的天堂 | 亚洲色成人中文字幕网站 | 久久精品国产大片免费观看 | 丰满少妇熟乱xxxxx视频 | 日日橹狠狠爱欧美视频 | 呦交小u女精品视频 | 国产精品美女久久久网av | 亚洲中文字幕无码一久久区 | 久久久中文久久久无码 | 久久亚洲中文字幕精品一区 | 丝袜人妻一区二区三区 | 精品一二三区久久aaa片 | 天天躁日日躁狠狠躁免费麻豆 | 久久久久国色av免费观看性色 | 国产精品99久久精品爆乳 | 亚洲精品国产品国语在线观看 | 无码人妻丰满熟妇区毛片18 | 少妇无码一区二区二三区 | 男女爱爱好爽视频免费看 | 亚洲国产欧美日韩精品一区二区三区 | 强辱丰满人妻hd中文字幕 | 99国产精品白浆在线观看免费 | 国产精品无码永久免费888 | 国产亚洲精品久久久久久国模美 | 风流少妇按摩来高潮 | 激情五月综合色婷婷一区二区 | 激情综合激情五月俺也去 | 日韩精品成人一区二区三区 | 99国产精品白浆在线观看免费 | 中文无码精品a∨在线观看不卡 | 国产特级毛片aaaaaa高潮流水 | 日日天日日夜日日摸 | 国产亚洲精品久久久久久久 | 日本大乳高潮视频在线观看 | 无码成人精品区在线观看 | 无码人妻av免费一区二区三区 | 欧美日韩久久久精品a片 | 国产小呦泬泬99精品 | 色噜噜亚洲男人的天堂 | 日韩精品无码免费一区二区三区 | 日日天干夜夜狠狠爱 | 波多野结衣乳巨码无在线观看 | 乌克兰少妇xxxx做受 | 亚洲一区二区三区含羞草 | 亚洲国产午夜精品理论片 | 亚洲阿v天堂在线 | 精品国产aⅴ无码一区二区 | 三级4级全黄60分钟 | 久久久久久久女国产乱让韩 | 国产在线精品一区二区高清不卡 | 色综合久久中文娱乐网 | 欧美性生交活xxxxxdddd | 色婷婷综合中文久久一本 | 天干天干啦夜天干天2017 | 真人与拘做受免费视频一 | 黑人玩弄人妻中文在线 | 人妻人人添人妻人人爱 | 一本久道高清无码视频 | 鲁大师影院在线观看 | 日本丰满熟妇videos | 国产三级精品三级男人的天堂 | 亚洲va中文字幕无码久久不卡 | 国产高清不卡无码视频 | 97精品人妻一区二区三区香蕉 | 色综合久久久久综合一本到桃花网 | 亚洲 a v无 码免 费 成 人 a v | 黄网在线观看免费网站 | 欧美人与禽猛交狂配 | 国产乱子伦视频在线播放 | 欧美成人家庭影院 | 麻豆md0077饥渴少妇 | 蜜桃臀无码内射一区二区三区 | www国产亚洲精品久久久日本 | 日韩视频 中文字幕 视频一区 | 国产精品igao视频网 | 国产亚洲视频中文字幕97精品 | 伊在人天堂亚洲香蕉精品区 | 无码人妻久久一区二区三区不卡 | 国产在线精品一区二区三区直播 | 无码吃奶揉捏奶头高潮视频 | 日韩精品a片一区二区三区妖精 | 国产亚洲美女精品久久久2020 | 国产成人精品视频ⅴa片软件竹菊 | 免费无码一区二区三区蜜桃大 | 国产熟女一区二区三区四区五区 | 日本一区二区三区免费播放 | 伊人久久大香线蕉亚洲 | 图片小说视频一区二区 | 欧美性色19p | 午夜无码人妻av大片色欲 | 少妇一晚三次一区二区三区 | 成人影院yy111111在线观看 | 精品偷拍一区二区三区在线看 | 国产精品第一区揄拍无码 | 日韩av无码一区二区三区不卡 | 亚洲无人区午夜福利码高清完整版 | 欧美熟妇另类久久久久久多毛 | 亚拍精品一区二区三区探花 | 欧美精品无码一区二区三区 | 国产一精品一av一免费 | 中文字幕人妻丝袜二区 | 无码人妻丰满熟妇区毛片18 | 成人无码精品一区二区三区 | 一区二区三区乱码在线 | 欧洲 | 午夜精品久久久久久久 | 午夜福利电影 | 在线成人www免费观看视频 | 亚洲成av人片天堂网无码】 | 亚洲日韩av一区二区三区四区 | 久久精品国产一区二区三区肥胖 | 精品国偷自产在线视频 | 色婷婷欧美在线播放内射 | 乱人伦人妻中文字幕无码久久网 | 亚洲国产av美女网站 | 免费无码的av片在线观看 | 两性色午夜视频免费播放 | 中文字幕亚洲情99在线 | 一本加勒比波多野结衣 | 人人妻人人澡人人爽精品欧美 | 午夜成人1000部免费视频 | 美女黄网站人色视频免费国产 | 野外少妇愉情中文字幕 | 中文字幕无线码免费人妻 | 日本又色又爽又黄的a片18禁 | 女人和拘做爰正片视频 | 成熟妇人a片免费看网站 | 黑人粗大猛烈进出高潮视频 | 无码人妻久久一区二区三区不卡 | 97久久精品无码一区二区 | 亚洲另类伦春色综合小说 | 一本大道久久东京热无码av | 国产精品va在线观看无码 | 人人妻人人澡人人爽人人精品浪潮 | 亚洲熟妇色xxxxx亚洲 | 在线播放亚洲第一字幕 | 欧美丰满老熟妇xxxxx性 | 曰韩无码二三区中文字幕 | av香港经典三级级 在线 | 一本久久a久久精品亚洲 | 成人无码精品一区二区三区 | 亚洲色www成人永久网址 | av香港经典三级级 在线 | 国产乱人伦av在线无码 | 国产亚洲人成a在线v网站 | 久久国产精品精品国产色婷婷 | 国产97人人超碰caoprom | 国产两女互慰高潮视频在线观看 | www成人国产高清内射 | 狠狠色噜噜狠狠狠7777奇米 | 亚洲精品国产精品乱码视色 | 曰韩无码二三区中文字幕 | 人人妻人人澡人人爽精品欧美 | 国产精品欧美成人 | 国内揄拍国内精品少妇国语 | 中文久久乱码一区二区 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 成人综合网亚洲伊人 | 久久天天躁夜夜躁狠狠 | 久久久久久国产精品无码下载 | 粉嫩少妇内射浓精videos | 国产午夜福利100集发布 | 成人综合网亚洲伊人 | 国产九九九九九九九a片 | 日本xxxx色视频在线观看免费 | 欧美国产日韩久久mv | 亚洲人成人无码网www国产 | 久久久久av无码免费网 | 老头边吃奶边弄进去呻吟 | 成人性做爰aaa片免费看不忠 | 天下第一社区视频www日本 | 在线播放亚洲第一字幕 | 在线观看免费人成视频 | 久久精品人人做人人综合 | 中文字幕日韩精品一区二区三区 | 狠狠色噜噜狠狠狠狠7777米奇 | 国产一精品一av一免费 | 九九久久精品国产免费看小说 | 精品一区二区三区无码免费视频 | 久久国产精品萌白酱免费 | 欧美成人高清在线播放 | 亚洲七七久久桃花影院 | 高潮毛片无遮挡高清免费视频 | 国产精品国产自线拍免费软件 | 亚洲 欧美 激情 小说 另类 | 欧美日韩亚洲国产精品 | 国内少妇偷人精品视频 | 久久国语露脸国产精品电影 | 国产成人精品优优av | 国产乱人偷精品人妻a片 | 欧美性生交xxxxx久久久 | 奇米影视7777久久精品人人爽 | 暴力强奷在线播放无码 | 亚洲码国产精品高潮在线 | 精品厕所偷拍各类美女tp嘘嘘 | 午夜性刺激在线视频免费 | 影音先锋中文字幕无码 | 伦伦影院午夜理论片 | 国产熟妇高潮叫床视频播放 | 欧美freesex黑人又粗又大 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 永久免费观看国产裸体美女 | 国产激情综合五月久久 | 免费观看的无遮挡av | 成人性做爰aaa片免费看不忠 | 人妻少妇精品久久 | 亚洲国产成人a精品不卡在线 | 天天爽夜夜爽夜夜爽 | 无码吃奶揉捏奶头高潮视频 | 欧美阿v高清资源不卡在线播放 | 无码吃奶揉捏奶头高潮视频 | 狠狠综合久久久久综合网 | 特级做a爰片毛片免费69 | 最新国产麻豆aⅴ精品无码 | 无套内射视频囯产 | 欧美日韩一区二区综合 | 精品厕所偷拍各类美女tp嘘嘘 | 国产成人一区二区三区在线观看 | 精品无人国产偷自产在线 | 97久久国产亚洲精品超碰热 | 大屁股大乳丰满人妻 | 国产va免费精品观看 | 无码国产乱人伦偷精品视频 | 青青青手机频在线观看 | 国产成人精品一区二区在线小狼 | 欧美35页视频在线观看 | 精品久久久久久人妻无码中文字幕 | 丝袜美腿亚洲一区二区 | 小泽玛莉亚一区二区视频在线 | 欧美日韩一区二区三区自拍 | 中文字幕av日韩精品一区二区 | 色综合久久久久综合一本到桃花网 | 色欲综合久久中文字幕网 | 67194成是人免费无码 | 无码av最新清无码专区吞精 | 98国产精品综合一区二区三区 | 国产亚洲精品久久久久久大师 | www国产亚洲精品久久久日本 | 人人妻人人澡人人爽欧美一区 | 中文毛片无遮挡高清免费 | 亚洲精品一区二区三区四区五区 | 97精品人妻一区二区三区香蕉 | 日韩人妻少妇一区二区三区 | 西西人体www44rt大胆高清 | 国产精品a成v人在线播放 | 在线天堂新版最新版在线8 | 国产亚洲精品久久久久久国模美 | 人人爽人人澡人人高潮 | 国色天香社区在线视频 | 亚洲经典千人经典日产 | 美女张开腿让人桶 | 久久视频在线观看精品 | 人妻天天爽夜夜爽一区二区 | 少妇高潮喷潮久久久影院 | 精品无码国产自产拍在线观看蜜 | 国产乱码精品一品二品 | 亚洲 欧美 激情 小说 另类 | 国产亲子乱弄免费视频 | 99久久精品无码一区二区毛片 | 亚洲国产av精品一区二区蜜芽 | 人妻无码久久精品人妻 | 特黄特色大片免费播放器图片 | 俺去俺来也在线www色官网 | 特黄特色大片免费播放器图片 | 精品国产青草久久久久福利 | 亚洲综合色区中文字幕 | 欧美激情内射喷水高潮 | 精品偷自拍另类在线观看 | 亚洲熟悉妇女xxx妇女av | 丝袜足控一区二区三区 | 亚洲精品国产a久久久久久 | 双乳奶水饱满少妇呻吟 | 奇米影视7777久久精品人人爽 | 麻豆国产97在线 | 欧洲 | 中文字幕无码日韩专区 | 少妇无码av无码专区在线观看 | av无码久久久久不卡免费网站 | 日韩无套无码精品 | 国产精品久久久久久久9999 | 久久综合给久久狠狠97色 | 成人无码视频免费播放 | 国产高潮视频在线观看 | 色五月丁香五月综合五月 | 亚洲一区二区三区在线观看网站 | 精品国产av色一区二区深夜久久 | 5858s亚洲色大成网站www | 国产真人无遮挡作爱免费视频 | 久久人人爽人人人人片 | 久久国产精品精品国产色婷婷 | 精品欧美一区二区三区久久久 | 久久国产劲爆∧v内射 | 精品无码成人片一区二区98 | 人妻互换免费中文字幕 | 成人aaa片一区国产精品 | 中文精品无码中文字幕无码专区 | 色一情一乱一伦 | 97夜夜澡人人双人人人喊 | 免费人成网站视频在线观看 | 亚洲欧美精品aaaaaa片 | 99精品视频在线观看免费 | 帮老师解开蕾丝奶罩吸乳网站 | 国产成人无码av在线影院 | 日韩av无码一区二区三区 | 天天做天天爱天天爽综合网 | 麻豆国产人妻欲求不满 | 午夜肉伦伦影院 | 亚洲成熟女人毛毛耸耸多 | 荫蒂被男人添的好舒服爽免费视频 | 国产午夜福利亚洲第一 | 欧美阿v高清资源不卡在线播放 | 日韩人妻少妇一区二区三区 | 国产内射爽爽大片视频社区在线 | 1000部夫妻午夜免费 | 亚洲区欧美区综合区自拍区 | 十八禁真人啪啪免费网站 | 久久这里只有精品视频9 | 丰满肥臀大屁股熟妇激情视频 | 亚洲精品国产精品乱码视色 | 青青草原综合久久大伊人精品 | 久久国产自偷自偷免费一区调 | 日韩欧美群交p片內射中文 | 欧美丰满熟妇xxxx | 国产精品办公室沙发 | 色综合天天综合狠狠爱 | 色欲久久久天天天综合网精品 | 亚洲另类伦春色综合小说 | 99久久无码一区人妻 | 国产成人精品三级麻豆 | 国产热a欧美热a在线视频 | 日韩成人一区二区三区在线观看 | 国产成人无码午夜视频在线观看 | 丰腴饱满的极品熟妇 | 国产成人综合在线女婷五月99播放 | 色综合久久88色综合天天 | 亚洲日韩精品欧美一区二区 | 亚洲精品中文字幕久久久久 | 亚洲中文字幕av在天堂 | 性啪啪chinese东北女人 | 狠狠cao日日穞夜夜穞av | 婷婷五月综合缴情在线视频 | 午夜精品一区二区三区的区别 | 精品欧美一区二区三区久久久 | 欧洲欧美人成视频在线 | 亚洲国产精品久久人人爱 | 美女极度色诱视频国产 | 131美女爱做视频 | 亚洲中文字幕在线无码一区二区 | 影音先锋中文字幕无码 | 天下第一社区视频www日本 | 狠狠色噜噜狠狠狠狠7777米奇 | 亚洲精品成a人在线观看 | 帮老师解开蕾丝奶罩吸乳网站 | 亚洲一区二区观看播放 | 亚洲啪av永久无码精品放毛片 | 精品国偷自产在线视频 | 丰满少妇人妻久久久久久 | 国产无遮挡又黄又爽免费视频 | 人人妻人人澡人人爽欧美精品 | 国产做国产爱免费视频 | 国产又爽又猛又粗的视频a片 | 久久精品无码一区二区三区 | 国产免费久久久久久无码 | 人妻插b视频一区二区三区 | 纯爱无遮挡h肉动漫在线播放 | 日本免费一区二区三区最新 | 精品一二三区久久aaa片 | 亚洲人成影院在线观看 | 亚洲自偷自拍另类第1页 | 老熟妇乱子伦牲交视频 | 国产极品美女高潮无套在线观看 | 国产精品理论片在线观看 | 中文字幕乱码亚洲无线三区 | 无码人妻精品一区二区三区不卡 | 国产人妻久久精品二区三区老狼 | 国产精品美女久久久 | 香蕉久久久久久av成人 | 蜜桃无码一区二区三区 | 精品一区二区三区波多野结衣 | 亚洲成av人片在线观看无码不卡 | 女高中生第一次破苞av | 国产黄在线观看免费观看不卡 | 日韩无码专区 | 国产suv精品一区二区五 | 亚洲另类伦春色综合小说 | 伊人久久大香线焦av综合影院 | 国产精品爱久久久久久久 | 一本色道久久综合亚洲精品不卡 | 成人三级无码视频在线观看 | 国产激情一区二区三区 | 中文字幕日产无线码一区 | 四虎国产精品一区二区 | 漂亮人妻洗澡被公强 日日躁 | 欧美日韩久久久精品a片 | 久久久久久a亚洲欧洲av冫 | 麻豆精品国产精华精华液好用吗 | 欧美精品免费观看二区 | 熟妇人妻无码xxx视频 | 人妻aⅴ无码一区二区三区 | 色老头在线一区二区三区 | 久久亚洲精品中文字幕无男同 | 妺妺窝人体色www婷婷 | 人人爽人人爽人人片av亚洲 | 99精品久久毛片a片 | 婷婷五月综合激情中文字幕 | 久久久精品成人免费观看 | 欧美 日韩 人妻 高清 中文 | 久久精品国产一区二区三区 | 一二三四在线观看免费视频 | 国产女主播喷水视频在线观看 | 东北女人啪啪对白 | 清纯唯美经典一区二区 | 亚洲区小说区激情区图片区 | 午夜丰满少妇性开放视频 | 免费无码的av片在线观看 | 欧美日本精品一区二区三区 | 国产网红无码精品视频 | 中文字幕无码热在线视频 | 98国产精品综合一区二区三区 | a国产一区二区免费入口 | 亚洲呦女专区 | 乱人伦人妻中文字幕无码 | 久久综合九色综合97网 | 中文字幕乱码中文乱码51精品 | 欧美丰满熟妇xxxx性ppx人交 | 日欧一片内射va在线影院 | 呦交小u女精品视频 | 色综合视频一区二区三区 | 久久国产精品萌白酱免费 | 色综合视频一区二区三区 | 曰韩少妇内射免费播放 | 日韩精品a片一区二区三区妖精 | 最近的中文字幕在线看视频 | aⅴ亚洲 日韩 色 图网站 播放 | 77777熟女视频在线观看 а天堂中文在线官网 | 377p欧洲日本亚洲大胆 | 丰满人妻翻云覆雨呻吟视频 | 亚洲人成人无码网www国产 | 国产美女精品一区二区三区 | 亚洲人亚洲人成电影网站色 | 国产精品高潮呻吟av久久4虎 | 久久国内精品自在自线 | 内射后入在线观看一区 | 露脸叫床粗话东北少妇 | 亚洲一区二区观看播放 | 免费男性肉肉影院 | 亚洲の无码国产の无码步美 | 久久久精品国产sm最大网站 | 国产手机在线αⅴ片无码观看 | 九九在线中文字幕无码 | 18禁黄网站男男禁片免费观看 | 国产无遮挡吃胸膜奶免费看 | 欧美日韩久久久精品a片 | 青青草原综合久久大伊人精品 | 亚洲国产精品无码久久久久高潮 | 男女猛烈xx00免费视频试看 | 午夜福利电影 | 中文字幕人妻无码一区二区三区 | 日本又色又爽又黄的a片18禁 | 亚洲国产精品久久久天堂 | 亚洲熟悉妇女xxx妇女av | 国产精品永久免费视频 | 国产女主播喷水视频在线观看 | 日韩人妻系列无码专区 | 国产偷自视频区视频 | 亚洲无人区一区二区三区 | 精品国产一区二区三区av 性色 | 荫蒂被男人添的好舒服爽免费视频 | 亚洲色欲色欲天天天www | 一本一道久久综合久久 | 亚洲国产欧美日韩精品一区二区三区 | 亚洲欧美日韩成人高清在线一区 | 最新国产乱人伦偷精品免费网站 | 水蜜桃色314在线观看 | 啦啦啦www在线观看免费视频 | 高潮毛片无遮挡高清免费视频 | 精品久久8x国产免费观看 | 久久精品国产99久久6动漫 | 久精品国产欧美亚洲色aⅴ大片 | 亚洲色大成网站www国产 | www国产亚洲精品久久网站 | 成熟女人特级毛片www免费 | 成人无码视频在线观看网站 | 亚洲精品中文字幕 | 香蕉久久久久久av成人 | 成人欧美一区二区三区 | 亚洲国产欧美日韩精品一区二区三区 | 精品欧洲av无码一区二区三区 | 红桃av一区二区三区在线无码av | 亚洲国产av美女网站 | 精品人妻人人做人人爽夜夜爽 | 国产一区二区三区影院 | 色诱久久久久综合网ywww | 乱人伦中文视频在线观看 | 国产人妻久久精品二区三区老狼 | 强奷人妻日本中文字幕 | 亚洲人成网站在线播放942 | 伊人久久婷婷五月综合97色 | 麻豆人妻少妇精品无码专区 | 久久人人97超碰a片精品 | 国产在线精品一区二区三区直播 | 国产av人人夜夜澡人人爽麻豆 | 欧洲熟妇精品视频 | 成 人 免费观看网站 | 亚洲国产高清在线观看视频 | 国产97色在线 | 免 | 熟妇人妻激情偷爽文 | 亚洲精品国偷拍自产在线麻豆 | а天堂中文在线官网 | 久久99热只有频精品8 | 国产成人久久精品流白浆 | 国内精品一区二区三区不卡 | 爆乳一区二区三区无码 | 国产情侣作爱视频免费观看 | 日韩精品一区二区av在线 | 亚洲欧美日韩成人高清在线一区 | 一区二区三区乱码在线 | 欧洲 | 无码av免费一区二区三区试看 | 中文无码精品a∨在线观看不卡 | 又大又黄又粗又爽的免费视频 | 国产人妻久久精品二区三区老狼 | 精品久久久无码中文字幕 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 色欲久久久天天天综合网精品 | 无码成人精品区在线观看 | 国产精品久久久久无码av色戒 | 国产网红无码精品视频 | 国产精品高潮呻吟av久久 | 一本色道久久综合亚洲精品不卡 | 在线精品国产一区二区三区 | 国产午夜精品一区二区三区嫩草 | 亚洲成av人综合在线观看 | 日韩精品成人一区二区三区 | 秋霞成人午夜鲁丝一区二区三区 | 国产精品国产自线拍免费软件 | 色婷婷av一区二区三区之红樱桃 | 国产99久久精品一区二区 | 亚洲国产一区二区三区在线观看 | 国产成人一区二区三区在线观看 | 小泽玛莉亚一区二区视频在线 | 熟妇人妻中文av无码 | 国产乱人偷精品人妻a片 | 国产三级久久久精品麻豆三级 | 亚洲中文字幕乱码av波多ji | 国产亚洲精品久久久久久久久动漫 | 无码人妻精品一区二区三区不卡 | 伊人久久大香线蕉亚洲 | 国产精品高潮呻吟av久久 | 全黄性性激高免费视频 | 国产成人午夜福利在线播放 | 一本色道久久综合亚洲精品不卡 | 巨爆乳无码视频在线观看 | 性史性农村dvd毛片 | 老司机亚洲精品影院 | 国产在线精品一区二区高清不卡 | 天天爽夜夜爽夜夜爽 | 在线亚洲高清揄拍自拍一品区 | 亚洲欧洲日本无在线码 | 18黄暴禁片在线观看 | 狠狠色噜噜狠狠狠7777奇米 | 国产香蕉尹人综合在线观看 | 装睡被陌生人摸出水好爽 | 俄罗斯老熟妇色xxxx | 蜜桃臀无码内射一区二区三区 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 老熟女重囗味hdxx69 | 性欧美疯狂xxxxbbbb | 性开放的女人aaa片 | 国精品人妻无码一区二区三区蜜柚 | 亚洲中文字幕无码一久久区 | 国产精品人人爽人人做我的可爱 | 激情爆乳一区二区三区 | 欧美成人免费全部网站 | 日日碰狠狠丁香久燥 | 理论片87福利理论电影 | 国产色精品久久人妻 | 精品无人国产偷自产在线 | 国产极品美女高潮无套在线观看 | 欧美xxxxx精品 | 精品偷自拍另类在线观看 | 国产另类ts人妖一区二区 | 国产成人综合在线女婷五月99播放 | 亚洲精品午夜无码电影网 | 未满小14洗澡无码视频网站 | 日本精品少妇一区二区三区 | 内射后入在线观看一区 | 久久久精品国产sm最大网站 | 久久精品人妻少妇一区二区三区 | 国产九九九九九九九a片 | 亚洲欧美日韩成人高清在线一区 | 红桃av一区二区三区在线无码av | 国产精品高潮呻吟av久久 | 中文字幕久久久久人妻 | 小sao货水好多真紧h无码视频 | 99久久人妻精品免费一区 | 成熟人妻av无码专区 | 亚洲国产日韩a在线播放 | 人人妻人人藻人人爽欧美一区 | 5858s亚洲色大成网站www | 亚洲国产精品无码久久久久高潮 | 亚洲男女内射在线播放 | www国产亚洲精品久久久日本 | 免费人成在线视频无码 | 日日麻批免费40分钟无码 | 久久精品国产99精品亚洲 | 好屌草这里只有精品 | 欧美国产日韩久久mv | 荫蒂添的好舒服视频囗交 | 成 人 网 站国产免费观看 | 亚洲国产av美女网站 | 久久综合久久自在自线精品自 | 亚洲国产成人a精品不卡在线 | 免费无码午夜福利片69 | 亚洲综合无码一区二区三区 | 377p欧洲日本亚洲大胆 | 国产亚洲视频中文字幕97精品 | 99riav国产精品视频 | 国产欧美亚洲精品a | 久久99精品国产麻豆 | 东北女人啪啪对白 | 国产午夜福利100集发布 | 中文精品无码中文字幕无码专区 | 少妇人妻av毛片在线看 | 色窝窝无码一区二区三区色欲 | 国产综合色产在线精品 | 成年美女黄网站色大免费视频 | 亚洲乱码日产精品bd | 亚洲小说图区综合在线 | 女人被男人爽到呻吟的视频 | 人妻中文无码久热丝袜 | 中文字幕av伊人av无码av | 无码乱肉视频免费大全合集 | 国产精品无码一区二区桃花视频 | 国产精品手机免费 | 内射欧美老妇wbb | 国产97人人超碰caoprom | 国产精品久久久久久久影院 | 人妻天天爽夜夜爽一区二区 | 99国产精品白浆在线观看免费 | 日韩欧美成人免费观看 | 亚洲第一网站男人都懂 | 亚洲自偷精品视频自拍 | 国产人妖乱国产精品人妖 | 精品国产国产综合精品 | 女高中生第一次破苞av | 国产亲子乱弄免费视频 | 97久久超碰中文字幕 | 欧美老人巨大xxxx做受 | 日韩人妻系列无码专区 | 丰满少妇熟乱xxxxx视频 | 爽爽影院免费观看 | 国产精品嫩草久久久久 | 国产午夜亚洲精品不卡 | 国产精品无套呻吟在线 | 精品国偷自产在线 | 国产精品免费大片 | 熟妇人妻无码xxx视频 | 中文字幕无码免费久久99 | 18无码粉嫩小泬无套在线观看 | 又大又紧又粉嫩18p少妇 | 国产精品亚洲一区二区三区喷水 | 欧美国产日韩久久mv | 伊人久久大香线蕉午夜 | 亚拍精品一区二区三区探花 | 日日碰狠狠躁久久躁蜜桃 | 乱人伦人妻中文字幕无码 | 亚洲成av人在线观看网址 | 人人爽人人澡人人人妻 | 人妻体内射精一区二区三四 | 性欧美videos高清精品 | 亚洲日韩中文字幕在线播放 | 久久人人爽人人人人片 | 正在播放东北夫妻内射 | 国产精品美女久久久 | 久久伊人色av天堂九九小黄鸭 | 东北女人啪啪对白 | 欧美自拍另类欧美综合图片区 | 黑人大群体交免费视频 | 亚洲爆乳精品无码一区二区三区 | 国产婷婷色一区二区三区在线 | 麻豆国产人妻欲求不满谁演的 | 国产超级va在线观看视频 | 成人动漫在线观看 | 日韩亚洲欧美中文高清在线 | 久久人人爽人人爽人人片ⅴ | 波多野结衣一区二区三区av免费 | 宝宝好涨水快流出来免费视频 | 一本色道久久综合亚洲精品不卡 | 少妇的肉体aa片免费 | 国产av人人夜夜澡人人爽麻豆 | 日韩在线不卡免费视频一区 | 人人爽人人爽人人片av亚洲 | 成人试看120秒体验区 | 久久精品国产一区二区三区肥胖 | 久久国产自偷自偷免费一区调 | 国产在线aaa片一区二区99 | 国产精品无码永久免费888 | 国产精品沙发午睡系列 | 中文字幕无码免费久久99 | 国产精品va在线播放 | 国产偷抇久久精品a片69 | 97夜夜澡人人爽人人喊中国片 | 国产成人无码一二三区视频 | 亚洲精品久久久久avwww潮水 | 国产口爆吞精在线视频 | 欧洲vodafone精品性 | 麻豆果冻传媒2021精品传媒一区下载 | 精品日本一区二区三区在线观看 | 欧美xxxxx精品 | 久久精品视频在线看15 | 大胆欧美熟妇xx | 曰本女人与公拘交酡免费视频 | 久久国产自偷自偷免费一区调 | 久久精品无码一区二区三区 | 性欧美大战久久久久久久 | 人妻少妇被猛烈进入中文字幕 | 中文字幕无码日韩欧毛 | 国产精品.xx视频.xxtv | 一区二区传媒有限公司 | 欧美成人家庭影院 | 老太婆性杂交欧美肥老太 | 色一情一乱一伦一视频免费看 | 亚洲综合精品香蕉久久网 | 丰满人妻精品国产99aⅴ | 中文字幕无线码 | 免费人成在线观看网站 | 久久精品国产大片免费观看 | 国产人妻精品一区二区三区不卡 | 老太婆性杂交欧美肥老太 | 免费人成在线视频无码 | 色情久久久av熟女人妻网站 | 奇米影视7777久久精品人人爽 | √天堂中文官网8在线 | 国产人妻久久精品二区三区老狼 | 77777熟女视频在线观看 а天堂中文在线官网 | 亚洲国产精品毛片av不卡在线 | 成人三级无码视频在线观看 | 欧美日韩综合一区二区三区 | 成人欧美一区二区三区黑人免费 | 亚洲一区二区三区偷拍女厕 | 精品国产青草久久久久福利 | 欧美日韩精品 | 久久99国产综合精品 | 国产人妻大战黑人第1集 | 欧美日韩一区二区三区自拍 | 亚洲成av人片天堂网无码】 | 一本无码人妻在中文字幕免费 | yw尤物av无码国产在线观看 | 一二三四社区在线中文视频 | 国产亚洲日韩欧美另类第八页 | 成人毛片一区二区 | 领导边摸边吃奶边做爽在线观看 | 亚洲综合无码久久精品综合 | 亚洲国产成人av在线观看 | 精品成在人线av无码免费看 | аⅴ资源天堂资源库在线 | 俄罗斯老熟妇色xxxx | 中文字幕无码日韩欧毛 | 久久精品国产亚洲精品 | 日韩精品无码一区二区中文字幕 | 欧美日韩在线亚洲综合国产人 | 午夜嘿嘿嘿影院 | 人人妻人人澡人人爽精品欧美 | 亚洲国精产品一二二线 | 天下第一社区视频www日本 | 一区二区传媒有限公司 | 午夜无码人妻av大片色欲 | 亚洲男人av香蕉爽爽爽爽 | 欧美成人免费全部网站 | 国产黄在线观看免费观看不卡 | 小泽玛莉亚一区二区视频在线 | 欧美性色19p | 久久久av男人的天堂 | 亚洲成av人综合在线观看 | 精品日本一区二区三区在线观看 | 亚洲 激情 小说 另类 欧美 | 伦伦影院午夜理论片 | 亚洲成在人网站无码天堂 | 狠狠亚洲超碰狼人久久 | 人人妻人人澡人人爽欧美精品 | 成人无码精品1区2区3区免费看 | 天堂在线观看www | 无遮挡国产高潮视频免费观看 | 国产成人无码av在线影院 | 日本精品人妻无码免费大全 | 国产明星裸体无码xxxx视频 | 欧美成人高清在线播放 | 婷婷五月综合缴情在线视频 | 乌克兰少妇性做爰 | 亚洲一区二区三区香蕉 | 大肉大捧一进一出好爽视频 | 无码吃奶揉捏奶头高潮视频 | 久久人人97超碰a片精品 | 波多野结衣高清一区二区三区 | 无码人妻丰满熟妇区毛片18 | 蜜臀av无码人妻精品 | 色欲综合久久中文字幕网 | а天堂中文在线官网 | 女人被爽到呻吟gif动态图视看 | 精品国产乱码久久久久乱码 | 亚洲大尺度无码无码专区 | 乱码av麻豆丝袜熟女系列 | 国产性生交xxxxx无码 | 成人精品视频一区二区 | 亚洲欧美日韩综合久久久 | 麻豆果冻传媒2021精品传媒一区下载 | 中文字幕日韩精品一区二区三区 | 人妻无码久久精品人妻 | 国产在线无码精品电影网 | 日本成熟视频免费视频 | 久久综合狠狠综合久久综合88 | 中文字幕乱妇无码av在线 | 亚洲一区二区三区播放 | 欧洲熟妇精品视频 | 国产猛烈高潮尖叫视频免费 | 国产成人av免费观看 | 欧美猛少妇色xxxxx |