亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 編程 > Ruby > 正文

總結(jié)Ruby的語法和語言的特性

2020-02-24 15:36:54
字體:
供稿:網(wǎng)友

Ruby是一種解釋性的、面向?qū)ο蟮膭?dòng)態(tài)語言,Ruby的策略是在靈活性和運(yùn)行安全之間找到平衡,隨著Rails框架的出現(xiàn),Ruby也獲得了驚人的成功,下面就讓武林技術(shù)頻道小編為你總結(jié)Ruby的語法和語言的特性。

1. 基礎(chǔ)
在Ruby交互命令行中輸入以下命令(>>為命令行提示符,=>為返回值;下文將把=>符號(hào)和語句寫在一行內(nèi)表明其返回值):

ruby;">>> puts 'hello, world'hello, world=> nil>> language = 'Ruby'=> "Ruby">> puts "hello, #{language}"hello, Ruby=> nil

以上代碼使用puts輸出,給變量賦值,并用#{}的語法實(shí)現(xiàn)字符串替換。這表明Ruby是解釋執(zhí)行的;變量無需聲明即可直接初始化和賦值;每條Ruby代碼都會(huì)返回某個(gè)值;單引號(hào)包含的字符串表示它將直接被解釋,雙引號(hào)包含的字符串會(huì)引發(fā)字符串替換。

1.1 編程模型

Ruby是一門純面向?qū)ο笳Z言,在Ruby中一切皆為對(duì)象,可以用“.”調(diào)用對(duì)象具有的方法,可以通過class和methods方法查看對(duì)象的類型及支持的方法,如4.class => Fixnum,7.methods => ["inspect", "%", "<<", "numerator", ...],false.class => FalseClass(方括號(hào)表示數(shù)組)。

1.2 流程控制

條件判斷有正常的塊形式,也有簡(jiǎn)單明了的單行形式;除了常見的if語句外,還有unless語句(等價(jià)于if not,但可讀性更強(qiáng))。同理,循環(huán)也有正常的塊形式和單行形式。注意:除了nil和false之外,其他值都代表true,包括0!

# 塊形式if x == 4 puts 'This is 4.'end# 單行形式puts 'This is false.' unless truex = x + 1 while x < 10 # x的結(jié)果為10x = x - 1 until x == 1 # x的結(jié)果為1

和其他C家族的語言差不多,Ruby的邏輯運(yùn)算符and(&&)、or(||)都自帶短路功能,若想執(zhí)行整個(gè)表達(dá)式,可以用&或|

1.3 鴨子類型

執(zhí)行4 + 'four'會(huì)出現(xiàn)TypeError的錯(cuò)誤,說明Ruby是強(qiáng)類型語言,在發(fā)生類型沖突時(shí),將得到一個(gè)錯(cuò)誤。如果把個(gè)語句放在def...end函數(shù)定義中,則只有在調(diào)用函數(shù)時(shí)才會(huì)報(bào)錯(cuò),說明Ruby在運(yùn)行時(shí)而非編譯時(shí)進(jìn)行類型檢查,這稱為動(dòng)態(tài)類型。Ruby的類型系統(tǒng)有自己的潛在優(yōu)勢(shì),即多個(gè)類不必繼承自相同的父類就能以“多態(tài)”的方式使用:

a = ['100', 100.0]puts a[0].to_i # => 100puts a[1].to_i # => 100

這就是所謂的“鴨子類型”(duck typing)。數(shù)組的第一個(gè)元素是String類型,第二個(gè)元素是Float類型,但轉(zhuǎn)換成整數(shù)用的都是to_i。鴨子類型并不在乎其內(nèi)在類型是什么,只要一個(gè)對(duì)象像鴨子一樣走路,像鴨子一樣嘎嘎叫,那它就是只鴨子。在面向?qū)ο笤O(shè)計(jì)思想中,有一個(gè)重要原則:對(duì)接口編碼,不對(duì)實(shí)現(xiàn)編碼。如果利用鴨子類型,實(shí)現(xiàn)這一原則只需極少的額外工作,就能輕松完成。

1.4 函數(shù)

def tell_the_truth trueend

每個(gè)函數(shù)都會(huì)返回結(jié)果,如果沒有顯式指定返回值,函數(shù)就將退出函數(shù)前最后處理的表達(dá)式的值返回。函數(shù)也是個(gè)對(duì)象,可以作為參數(shù)傳給其他函數(shù)。

1.5 數(shù)組

和Python一樣,Ruby的數(shù)組也是用中括號(hào)來定義,如animals = ['lion', 'tiger', 'bear'];負(fù)數(shù)下標(biāo)可以返回倒數(shù)的元素,如animals[-1] => "bear";通過指定一個(gè)Range對(duì)象來獲取一個(gè)區(qū)段的元素,如animals[1..2] => ['tiger', 'bear']。此外,數(shù)組元素可以互不相同,多為數(shù)組也不過是數(shù)組的數(shù)組。數(shù)組擁有極其豐富的API,可用其實(shí)現(xiàn)隊(duì)列、鏈表、棧、集合等等。

1.6 散列表

numbers = {2 => 'two', 5 => 'five'}stuff = {:array => [1, 2, 3], :string => 'Hi, mom!'}# stuff[:string] => "Hi, mom!"

散列表可以帶任何類型的鍵,上述代碼的stuff的鍵較為特殊——它是一個(gè)符號(hào)(symbol),前面帶有冒號(hào)標(biāo)識(shí)符。符號(hào)在給事物和概念命名時(shí)很好用,例如兩個(gè)同值字符串在物理上不同,但相同的符號(hào)卻是同一物理對(duì)象,可以通過反復(fù)調(diào)用'i am string'.object_id和:symbol.object_id來觀察。另外,當(dāng)散列表用作函數(shù)最后一個(gè)參數(shù)時(shí),大括號(hào)可有可無,如tell_the_truth :profession => :lawyer。

2. 面向?qū)ο?br>2.1 代碼塊

代碼塊是沒有名字的函數(shù)(匿名函數(shù)),可以用作參數(shù)傳遞給函數(shù)。代碼塊只占一行時(shí)用大括號(hào)包起來,占多行是用do/end包起來,可以帶若干個(gè)參數(shù)。

3.times {puts 'hehe'} # 輸出3行hehe['lion', 'tiger', 'bear'].each {|animal| puts animal} # 輸出列表的內(nèi)容

上面的times實(shí)際上是Fixnum類型的方法,要自己實(shí)現(xiàn)這樣一個(gè)方法非常容易:

class Fixnum def my_times  i = self   while i > 0    i = i - 1    yield  end endend
3.my_times {puts 'hehe'} # 輸出3行hehe

這段代碼打開一個(gè)現(xiàn)有的類,向其中添加一個(gè)自定義的my_times方法,并用yield調(diào)用代碼塊。在Ruby中,代碼塊不僅可用于循環(huán),還可用于延遲執(zhí)行,即代碼塊中的行為只有等到調(diào)用相關(guān)的yield時(shí)才會(huì)執(zhí)行。代碼塊充斥于Ruby的各種庫(kù),小到文件的每一行,大到在集合上進(jìn)行各種復(fù)雜操作,都是由代碼塊來完成的。

2.2 類

調(diào)用一個(gè)對(duì)象的class方法可以查看其類型,調(diào)用superclass可以查看這個(gè)類型的父類。下圖展示了數(shù)字的繼承鏈,其中橫向箭頭表示右邊是左邊實(shí)例化的對(duì)象,縱向箭頭表示下邊繼承于上邊。Ruby的一切事物都有一個(gè)共同的祖先Object。

2016612151714257.png (685×376)

最后通過一個(gè)完整的實(shí)例——定義一棵樹,來看下Ruby的類如何定義和使用,該注意的點(diǎn)都寫在注釋里面了。

class Tree # 定義實(shí)例變量,使用attr或attr_accessor關(guān)鍵字,前者定義變量和訪問變量的同名getter方法(即只讀),后者定義的變量多了同名setter方法(注意這里使用了符號(hào)) attr_accessor :children, :node_name # 構(gòu)造方法(構(gòu)造方法必須命名為initialize) def initialize(name, children=[])  @node_name = name  @children = children end # 遍歷所有節(jié)點(diǎn)并執(zhí)行代碼塊block,注意參數(shù)前加一個(gè)&表示將代碼塊作為閉包傳遞給函數(shù) def visit_all(&block)  visit &block  children.each {|c| c.visit_all &block} end # 訪問一個(gè)節(jié)點(diǎn)并執(zhí)行代碼塊block def visit(&block)  block.call self endendruby_tree = Tree.new("Ruby",  [Tree.new("Reia"),  Tree.new("MacRuby")])# 訪問一個(gè)節(jié)點(diǎn)ruby_tree.visit {|node| puts node.node_name}# 訪問整棵樹ruby_tree.visit_all {|node| puts "Node: #{node.node_name}"}

再提一下Ruby的命名規(guī)范:

(1)類采用CamelCase命名法
(2)實(shí)例變量(一個(gè)對(duì)象有一個(gè)值)前必須加上@,類變量(一個(gè)類有一個(gè)值)前必須加上@@
(3)變量和方法名全小寫用下劃線命名法,如underscore_style
(4)常量采用全大寫下劃線命名法,如ALL_CAPS_STYLE
(5)用于邏輯測(cè)試的函數(shù)和方法一般要加上問號(hào),如if test?

3. 模塊與混入(Mixin)
面向?qū)ο笳Z言利用繼承,將行為傳播到相似的對(duì)象上。若一個(gè)對(duì)象像繼承多種行為,一種做法是用多繼承,如C++;Java采用接口解決這一問題,Ruby采用模塊Mixin。模塊是函數(shù)和常量的集合,若在類中包含一個(gè)模塊,那么該模塊的行為和常量也會(huì)成為類的一部分。

# 定義模塊ToFilemodule ToFile # 獲取文件名 def filename  "object_name.txt" end # 創(chuàng)建文件 def to_f  File.open(filename, 'w') {|f| f.write(to_s)} # 注意這里to_s在其他地方定義! endend# 定義用戶類class Person include ToFile attr_accessor :name def initialize(name)  @name = name end def to_s  name endendPerson.new('matz').to_f # 創(chuàng)建了一個(gè)文件object_name.txt,里面包含內(nèi)容matz

上面的代碼很好理解,只是有一點(diǎn)要注意:to_s在模塊中使用,在類中實(shí)現(xiàn),但定義模塊的時(shí)候,實(shí)現(xiàn)它的類甚至還沒有定義。這正是鴨子類型的精髓所在。寫入文件的能力,和Person這個(gè)類沒有一點(diǎn)關(guān)系(一個(gè)類就應(yīng)該做屬于它自己的事情),但實(shí)際開發(fā)又需要把Person類寫入文件這種額外功能,這時(shí)候mixin就可以輕松勝任這種要求。

Ruby有兩個(gè)重要的mixin:枚舉(enumerable)和比較(comparable)。若想讓類可枚舉,必須實(shí)現(xiàn)each方法;若想讓類可比較,必須實(shí)現(xiàn)<=>(太空船)操作符(比較a,b兩操作數(shù),返回1、0或-1)。Ruby的字符串可以這樣比較:'begin' <=> 'end => -1。數(shù)組有很多好用的方法:

a = [5, 3, 4, 1]a.sort => [1, 3, 4, 5] # 整數(shù)已通過Fixnum類實(shí)現(xiàn)太空船操作符,因此可比較可排序a.any? {|i| i > 4} => truea.all? {|i| i > 0} => truea.collect {|i| i * 2} => [10, 6, 8, 2]a.select {|i| i % 2 == 0} => [4]a.member?(2) => falsea.inject {|product, i| product * i} => 60 # 第一個(gè)參數(shù)是代碼塊上一次執(zhí)行的結(jié)果,若不設(shè)初始值,則使用列表第一個(gè)值作為初始值

4. 元編程(metaprogramming)
所謂元編程,說白了就是“寫能寫程序的程序”,這說起來有點(diǎn)拗口,下面會(huì)通過實(shí)例來講解。

4.1 開放類

可以重定義Ruby中的任何類,并給它們擴(kuò)充任何你想要的方法,甚至能讓Ruby完全癱瘓,比如重定義Class.new方法。對(duì)于開發(fā)類來說,這種權(quán)衡主要考慮了自由,有這種重定義任何類或?qū)ο蟮淖杂?,就能寫出即為通俗易懂的代碼,但也要明白,自由越大、能力越強(qiáng),擔(dān)負(fù)的責(zé)任也越重。

class Numeric def inches  self end def feet  self * 12.inches end def miles  self * 5280.feet end def back  self * -1 end def forward  self endend

上面的代碼通過開放Numeric類,就可以像這樣采用最簡(jiǎn)單的語法實(shí)現(xiàn)用英寸表示距離:puts 10.miles.back,puts 2.feet.forward。

4.2 使用method_missing

Ruby找不到某個(gè)方法時(shí),會(huì)調(diào)用一個(gè)特殊的回調(diào)方法method_missing顯示診斷信息。通過覆蓋這個(gè)特殊方法,可以實(shí)現(xiàn)一些非常有趣且強(qiáng)大的功能。下面這個(gè)示例展示了如何用簡(jiǎn)潔的語法來實(shí)現(xiàn)羅馬數(shù)字。

class Roman # 覆蓋self.method_missing方法 def self.method_missing name, *args  roman = name.to_s  roman.gsub!("IV", "IIII")  roman.gsub!("IX", "VIIII")  roman.gsub!("XL", "XXXX")  roman.gsub!("XC", "LXXXX")  (roman.count("I") +   roman.count("V") * 5 +   roman.count("X") * 10 +   roman.count("L") * 50 +   roman.count("C") * 100) endendputs Roman.III # => 3puts Roman.XII # => 12

我們沒有給Roman類定義什么實(shí)際的方法,但已經(jīng)可以Roman類來表示任何羅馬數(shù)字!其原理就是在沒有找到定義方法時(shí),把方法名稱和參數(shù)傳給method_missing執(zhí)行。首先調(diào)用to_s把方法名轉(zhuǎn)為字符串,然后將羅馬數(shù)字“左減”特殊形式轉(zhuǎn)換為“右加”形式(更容易計(jì)數(shù)),最后統(tǒng)計(jì)各個(gè)符號(hào)的個(gè)數(shù)和加權(quán)。

當(dāng)然,如此強(qiáng)有力的工具也有其代價(jià):類調(diào)試起來會(huì)更加困難,因?yàn)镽uby再也不會(huì)告訴你找不到某個(gè)方法。因此method_missing是一把雙刃劍,它確實(shí)可以讓語法大大簡(jiǎn)化,但是要以人為地加強(qiáng)程序的健壯性為前提。

4.3 使用模塊

Ruby最流行的元編程方式,非模塊莫屬。下面的代碼講述如何用模塊的方式擴(kuò)展一個(gè)可以讀取csv文件的類。

module ActsAsCsv # 只要某個(gè)模塊被另一模塊include,就會(huì)調(diào)用被include模塊的included方法 def self.included(base)  base.extend ClassMethods end module ClassMethods  def acts_as_csv   include InstanceMethods  end end module InstanceMethods  attr_accessor :headers, :csv_contents  def initialize   read  end  def read   @csv_contents = []   filename = self.class.to_s.downcase + '.txt'   file = File.new(filename)   @headers = file.gets.chomp.split(', ') # String的chomp方法去除字符串末尾的回車換行符   file.each do |row|    @csv_contents << row.chomp.split(', ')   end  end endend # end of module ActsAsCsvclass RubyCsv  # 沒有繼承,可以自由添加 include ActsAsCsv acts_as_csvendm = RubyCsv.newputs m.headers.inspectputs m.csv_contents.inspect

上述代碼中RubyCsv包含了ActsAsCsv,所以ActsAsCsv的included方法中,base就指RubyCsv,ActsAsCsv模塊給RubyCsv類添加了唯一一個(gè)類方法acts_as_csv,這個(gè)方法又打開RubyCsv類,并在類中包含了所有實(shí)例方法。如此這般,就寫了一個(gè)會(huì)寫程序的程序(通過模塊來動(dòng)態(tài)添加類方法)。

一些出色的Ruby框架,如Builder和ActiveRecord,都會(huì)為了改善可讀性而特別依賴元編程。借助元編程的威力,可以做到盡量縮短正確的Ruby語法與日常用于之間的距離。注意一切都是為了提升代碼可讀性而服務(wù)。

5. 總結(jié)
Ruby的純面向?qū)ο罂梢宰屇阌靡恢碌姆绞絹硖幚韺?duì)象。鴨子類型根據(jù)對(duì)象可提供的方法,而不是對(duì)象的繼承層次,實(shí)現(xiàn)了更切合實(shí)際的多態(tài)設(shè)計(jì)。Ruby的模塊和開放類,使程序員能把行為緊密結(jié)合到語法上,大大超越了類中定義的傳統(tǒng)方法和實(shí)例變量。
核心優(yōu)勢(shì):
(1)優(yōu)雅的語法和強(qiáng)大的靈活性
(2)腳本:Ruby是一門夢(mèng)幻般的腳本語言,可以出色地完成許多任務(wù)。Ruby許多語法糖可以大幅提高生產(chǎn)效率,各種各樣的庫(kù)和gem(Ruby包)可以滿足絕大多數(shù)日常需要。
(3)Web開發(fā):很多人學(xué)Ruby最終就是為了用Ruby on Rails框架來進(jìn)行Web開發(fā)。作為一個(gè)極其成功的MVC框架,其有著廣泛的社區(qū)支持及優(yōu)雅的語法。Twitter最初就是用Ruby實(shí)現(xiàn)的,借助Ruby無比強(qiáng)大的生產(chǎn)力,可以快速地開發(fā)出一個(gè)可推向市場(chǎng)的合格產(chǎn)品。
不足之處:
(1)性能:這是Ruby的最大弱點(diǎn)。隨著時(shí)代的發(fā)展,Ruby的速度確實(shí)是越來越快。當(dāng)然,Ruby是創(chuàng)建目的為了改善程序員的體驗(yàn),在對(duì)性能要求不高的應(yīng)用場(chǎng)景下,性能換來生產(chǎn)效率的大幅提升無疑是值得的。
(2)并發(fā)和面向?qū)ο缶幊蹋好嫦驅(qū)ο笫墙⒃跔顟B(tài)包裝一系列行為的基礎(chǔ)上,但通常狀態(tài)是會(huì)改變的。程序中存在并發(fā)時(shí),這種編程策略就會(huì)引發(fā)嚴(yán)重問題。
(3)類型安全:靜態(tài)類型可提供一整套工具,可以更輕松地構(gòu)造語法樹,也因此能實(shí)現(xiàn)各種IDE。對(duì)Ruby這種動(dòng)態(tài)類型語言來說,實(shí)現(xiàn)IDE就困難得多。

以上就是武林技術(shù)頻道小編介紹的關(guān)于總結(jié)Ruby的語法和語言的特性,我們可以看到程序是越來越人性化了,想要了解更多的小伙伴,歡迎關(guān)注武林技術(shù)頻道了解更多哦。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

欧美精品一区二区三区在线播放| 日本一区二区三区四区在线视频| 中文字幕无码毛片免费看| 久久久一二三| 亚洲理论在线| 手机av免费在线| 91精品视频国产| 红桃视频一区二区三区免费| 国产ts一区| 夜夜春成人影院| 国产chinasex对白videos麻豆| 国产女同无遮挡互慰高潮91| 成人免费视频免费观看| 国产福利电影在线观看| 久久精品国产亚洲777| 国产露脸国语对白在线| 一区二区三区四区影院| 老司机午夜激情| 日韩激情久久| 中文久久久久久| 最爽无遮挡行房视频在线| 国产女人18毛片水真多成人如厕| 日韩高清不卡一区二区三区| 99成人在线| 91丨九色丨丰满| 人人妻人人澡人人爽| 成人情趣视频网站| 人妻无码中文字幕| 日本天堂中文字幕| 亚洲欧美视频二区| 日韩美女免费线视频| 国产日韩欧美三级| 亚洲激情午夜| 日本中文在线视频| www久久久com| 亚洲国产你懂的| 亚洲激情视频一区| 经典一区二区三区| 国产中文一区| 2023av在线| 免费av一区二区三区四区| 成人午夜在线视频| 日韩久久免费电影| a在线观看网站| 久久精品在线播放| 欧美国产成人精品| 四虎影视免费永久在线| 美女av一区| 俄罗斯一级**毛片在线播放| 日本wwwwwww| 国产露脸国语对白在线| 欧美久久久久久久久久| 久久免费看视频| 国产精品日韩欧美综合| 国产美女免费无遮挡| 高清在线一区二区| 伊人青青综合网站| 一区二区三区四区国产| 国内精品美女av在线播放| 亚洲视频在线观看一区二区| 日韩不卡中文字幕| 亚洲永久在线观看| 成人免费毛片嘿嘿连载视频…| 中文字幕亚洲专区| 国产一线天粉嫩馒头极品av| 国产精品高潮久久| 少妇影院在线观看| 欧美精品aaaa| 欧美另类交视频| 国产手机视频在线观看| 日韩精品一区二区三区在线播放| 黄色片网站免费| 欧美极品视频一区二区三区| 国产精品一二三产区| 中文字幕av手机在线| 韩国亚洲精品| 人人天天夜夜| 成人性生交大片免费看午夜| 日本精品久久久久久久久久| 中文字幕av一区二区三区免费看| 亚洲美女性生活视频| 在线国产网址| 欧美成人三级在线视频| 久久精品欧美一区二区| 亚洲动漫第一页| 日本乱子伦xxxx| 免费男女羞羞的视频网站中文子暮| 884aa四虎免费影库4h| 欧美激情不卡| 日本在线免费中文字幕| 神马午夜电影一区二区三区在线观看| 亚洲成a人片77777在线播放| 欧美成人在线免费观看| 日韩精品一区二区三区电影| 人人妻人人澡人人爽人人精品| 丁香激情视频| 五级黄高潮片90分钟视频| 亚洲欧美日本免费| 国产精品免费久久久久影院| 国产亚洲欧美另类中文| 真实的国产乱xxxx在线91| www.欧美精品一二三区| 日韩精品一区二区三区在线视频| 国产盗摄女厕一区二区三区| 欧美性猛交xxxxxx富婆| 污污内射在线观看一区二区少妇| 色婷婷综合久久久久| 少妇精品久久久一区二区三区| 人妻少妇无码精品视频区| 91在线视频免费| 国产欧美一区二区精品婷婷| 日韩av影视在线| 精品国产成人在线影院| 精品国产欧美一区二区三区成人| 日韩午夜av电影| 亚洲精品国自产拍在线观看| 午夜精品久久久久久99热软件| 男裸体无遮挡网站| 精品人妻一区二区三区含羞草| 亚洲国产精品t66y| 国产成人啪精品视频免费网| 九色成人免费视频| 成人精品视频一区二区| 蜜桃传媒入口| 中文字幕在线二区| 99re5久久在热线播放| 国产69精品久久久久久久久久| av有码在线观看| 日韩欧美一级在线播放| 亚洲精品一区二区三区在线观看| 精品孕妇一区二区三区| 欧美激情在线观看视频免费| 九色91播放| 午夜国产精品视频| 久久综合九色综合欧美98| 久久这里只有精品8| 日本在线视频免费观看| 成人免费视频免费观看| 成人免费一区二区三区在线观看| 亚洲大片免费观看| 国产aⅴ精品一区二区三区色成熟| 日韩精品一区二区三区中文在线| 粉嫩一区二区三区国产精品| 亚洲黄色在线| 日本一道本视频| 麻豆精品视频在线原创| 欧美一级黑人aaaaaaa做受| 中文字幕在线视频一区二区三区| 亚洲品质视频自拍网| 中文字幕日日夜夜| 欧美精品日韩一区| 精品国产一区二区三区在线| 色yeye香蕉凹凸一区二区av| 久久亚洲精品毛片| 日韩免费福利电影在线观看| 一级黄色电影片| 91动漫在线| 国产成人99久久亚洲综合精品| 一本久久综合亚洲鲁鲁五月天| 亚州色图欧美色图| 激情综合在线观看| 成人高清视频免费观看| 粉嫩av一区二区三区四区五区| 亚洲啪av永久无码精品放毛片| 手机av免费在线观看| 欧美套图亚洲一区| 日韩欧美三级视频| av日韩电影| 国产黄色av片| 6080亚洲理论片在线观看| 精品偷拍各种wc美女嘘嘘| 黑人巨大精品欧美一区二区一视频| 日韩av网址在线观看| 亚洲第一男人av| 日韩人妻一区二区三区| 久久精品91久久久久久再现| 女女百合国产免费网站| 男女激情视频一区| 高潮毛片7777777毛片| 91国视频在线| 中文字幕亚洲综合久久筱田步美| 91免费视频污| 国产精品国产精品国产专区不蜜| 亚洲午夜久久久久久久国产| 免费观看的av网站| 日韩精品免费视频一区二区三区| 精品人妻无码一区二区性色| 日韩aⅴ视频一区二区三区| 免费日本黄色网址| 超级碰在线观看| 日韩小视频在线观看| 国产成人在线免费视频| fc2成人免费人成在线观看播放| 在线视频一区观看| 99精品黄色片免费大全| 欧美成a人片免费观看久久五月天| 国内精品久久久久| 偷拍精品一区二区三区| 日本妇女一区| 91香蕉视频污在线| 色综合五月天导航| 日本一区二区精品视频| 国产成人免费看| 免费黄视频网站| 国产精品国产精品国产专区不片| 亚洲天堂中文字幕| 国产精品自拍偷拍| 国产在线精品成人一区二区三区| 日本中文在线| 一级特黄性色生活片| 激情欧美一区二区三区在线观看| 羞羞网站在线观看入口免费| 欧美性生交xxxxxdddd| 日韩电影大全免费观看2023年上| www.91香蕉视频| 成a人片亚洲日本久久| 中文在线免费二区三区| 18涩涩午夜精品.www| 91 中文字幕| 国产成人手机视频| 六月婷婷在线视频| 亚洲欧美综合乱码精品成人网| 91av在线播放视频| 亚洲国产另类久久精品| 福利影院在线看| 亚洲一级爰片777777| 4480yy私人影院高清不卡| 国产精品久久久久四虎| 销魂美女一区二区| 91精品国产乱码久久久久| 久久综合九色综合久99| 一卡二卡三卡日韩欧美| 国产污污视频在线观看| 国产中文一区二区| 国产特级嫩嫩嫩bbb| 伊人av在线播放| 2018av| 蜜桃传媒一区二区| 国产精品久久免费观看| 国产美女无遮挡永久免费| 久久精品一区二| 欧美色精品天天在线观看视频| 成人午夜影视| 一道本在线观看视频| av电影在线免费| 欧美男男freegayvideosroom| 全国精品久久少妇| 久久www免费人成精品| 俄罗斯女人裸体性做爰| 久久久精品有限公司| 亚洲黄色小说在线观看| 中文字幕在线观看视频免费| 日本在线观看一区二区| 亚洲天堂在线视频观看| 日本无删减在线| 国产成人免费av一区二区午夜| 亚洲第一视频网站| 亚洲精品成人| 国产在线观看不卡一区二区三区| 可以在线观看的av网站| 超碰在线97国产| 国产超级av| 日韩久久中文字幕| 五月天婷婷综合网| 黄色动漫免费看| 免费成人你懂的| 九九九九九九九九| 精品国产亚洲一区二区三区在线观看| 久久久久亚洲精品中文字幕| а√天堂中文在线资源bt在线| 欧美日韩一区二区在线观看| 中文字幕欧美一| 极品粉嫩小仙女高潮喷水久久| 国产午夜精品美女毛片视频| 免费看黄资源大全高清| 国产一本一道久久香蕉| 国产哺乳奶水91在线播放| 日本电影一区二区| 美国十次了思思久久精品导航| www 成人av com| 夜先锋av资源| www.青青草| 亚洲日本成人网| 欧美精品久久99久久在免费线| 日韩三级免费| 久久久亚洲天堂| 日韩色妇久久av| 曰本色欧美视频在线| 亚洲欧美另类久久久精品| 日本黄色一级网站| 污视频在线看操| 国产成人精品av在线观| 亚洲伦理在线精品| 99视频一区| 国产精品视频免费一区| 亚洲天堂视频在线| 日韩在线视频网| 国精品无码一区二区三区| 国产精品自拍视频一区| 不卡视频一区二区| 国产精品一卡二卡| 日本一本久久| 亚洲国产精品久久艾草纯爱| 亚洲v在线观看| 欧美破处大片在线视频| 国产日韩欧美一区二区三区| 欧美国产视频日韩| 久久国产麻豆精品| 91caoporn在线| 欧美成人精品一区二区免费看片| 麻豆久久精品| 中文高清一区| 成人信息集中地| 从欧美一区二区三区| 最新中文字幕在线观看视频| 欧美日韩一区二区三区在线播放| 日本在线免费观看| 99蜜月精品久久91| 国产一区欧美日韩| 国产成人高清精品免费5388| 99久久精品免费| 国产高清免费视频| …久久精品99久久香蕉国产| 日本少妇毛茸茸| 亚洲精品久久久久国产| 9色在线观看| 久草在线视频资源| 国产三级精品三级在线观看国产|