精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Scala代碼編寫中常見的十大陷阱

原創
開發 后端
很多Java開發者在學習Scala語言的時候,往往覺得Scala的語法和用法有些過于復雜,充滿語法糖,太“甜”了。在使用Scala編寫代碼時,由于語法和編寫習慣的不同,很多開發者會犯相同或相似的錯誤。一位Scala狂熱愛好者近日總結了十大這樣的錯誤,以供參考。

【51CTO精選譯文】對于支持并發和分布式處理、高可擴展、基于組件的應用程序來說,Scala的功能是很強大的。它利用了面向對象和函數式程序設計的優點。這種基于Java虛擬機的語言在宣布Twitter正使用它時受到了最多的沖擊(相關51CTO評論:從Scala進駐Twitter看多語言混雜系統的前景)。如果使用正確,Scala可以大量減少應用程序對代碼的需求。

對于Scala編程, 我們收集了這些常見代碼編寫中的陷阱。這些技巧來自于Daniel Sobral,一個曾參加過FreeBSD項目和Java軟件開發工程的Scala狂熱愛好者。

1. 語法錯誤

認為  “yield” 像 ”return” 一樣。有人會這樣寫:

  1. for(i <- 0 to 10) {  
  2.   if (i % 2 == 0)  
  3.     yield i  
  4.   else 
  5.     yield -i  

正確的表示應該是:

  1. for(i <- 0 to 10)   
  2. yield {  
  3.   if (i % 2 == 0)  
  4.     i  
  5.   else 
  6.     -i  

2. 誤用和語法錯誤

濫用scala.xml.XML.loadXXX。這個的語法分析器試圖訪問外部的DTD、strip組件或類似的東西。在scala.xml.parsing.ConstructingParser.fromXXX中有另一個可選的語法分析器。同時,在處理XML時忘記了等號兩端的空格。比如:

  1. val xml=<root/> 

這段代碼真正的意思是:

  1. val xml.$equal$less(root).$slash$greater  
  2.   

這種情況的發生是由于操作符相當隨意,而且scala采用這樣一種事實:字母數字字符與非字母數字字符通過下劃線可以結合成為一個有效的標識符。這也使得“x+y”這樣的表達式不會被當成一個標識符。而應該注意 “x_+”是一個有效的標識符。所以,賦值標識符的寫法應該是:

  1. val xml = <root/> 

3. 用法錯誤

為那些根本不是無關緊要的應用加入Application特征。

  1. object MyScalaApp extends Application {    
  2.   // ... body ...  

#t#示例部分的問題在于,body部分在單元對象初始化時執行。首先,單元初始化的執行是異步的,因此你的整個程序不能與其它線程交互;其次,即時編譯器(JIT)不會優化它,因此你的程序速度慢下來,這是沒有必要的。

另外,不能與其它線程的交互也意味著你會忘記測試應用程序的GUI或者Actors。

4. 用法錯誤

試圖模式匹配一個字符串的正則表達式,而又假定該正則表達式是無界的:

  1. val r = """(\d+)""".r  
  2. val s = "--> 5 <---" 
  3. s match {  
  4.   case r(n) => println("This won't match")  
  5.   case _ => println("This will")  

此處的問題在于, 當模式模式匹配時, Scala的正則表達式表現為如同開始于”^”,結束于”$”。使之工作的正確寫法是:

  1. val r = """(\d+)""".r  
  2. val s = "--> 5 <---" 
  3. r findFirstIn s match {  
  4.   case Some(n) => println("Matches 5 to "+n)  
  5.   case _ => println("Won't match")  

或者確保模式能匹配任意前綴和后綴:

  1. val r = """.*(\d+).*""".r  
  2. val s = "--> 5 <---" 
  3. s match {  
  4.   case r(n) => println("This will match the first group of r, "+n+", to 5")  
  5.   case _ => println("Won't match")  

#p#

5. 用法錯誤

把var和val認為是字段(fields):

Scala強制使用統一訪問準則(Uniform Access Principle),這使得我們無法直接引用一個字段。所有對任意字段的訪問只能通過getters和setters。val和var事實上只是定義一個字段,getter作為val字段,對于var則定義一個setter。

#t#Java程序員通常認為var和val是字段,而當發現在他們的方法中它們共享相同的命名空間時,常常覺得驚訝。因此,不能重復使用它們的名字。共享命名空間的是自動定義的getter和setter而不是字段本身。通常程序員們會試圖尋找一種訪問字段的方法,從而可以繞過限制——但這只是徒勞,統一訪問準則是無法違背的。它的另一個后果是,當進行子類化時val會覆蓋def。其它方法是行不通的,因為val增加了不變性保證,而def沒有。

當你需要重載時,沒有任何準則會指導你如何使用私有的getters和setters。Scala編譯器和庫代碼常使用私有值的別名和縮寫,反之公有的getters和setters則使用fullyCamelNamingConventions(一種命名規范)。其它的建議包括:重命名、實例中的單元化,甚至子類化。這些建議的例子如下:

重命名

  1. class User(val name: String, initialPassword: String) {  
  2.   private lazy var encryptedPassword = encrypt(initialPassword, salt)  
  3.   private lazy var salt = scala.util.Random.nextInt  
  4.  
  5.   private def encrypt(plainText: String, salt: Int): String = { ... }  
  6.   private def decrypt(encryptedText: String, salt: Int): String = { ... }  
  7.  
  8.   def password = decrypt(encryptedPassword, salt)  
  9.   def password_=(newPassword: String) = encrypt(newPassword, salt)  

單例模式(Singleton)

  1. class User(initialName: String, initialPassword: String) {  
  2.    private object fields {  
  3.      var name: String = initialName;  
  4.      var password: String = initialPassword;  
  5.    }  
  6.    def name = fields.name  
  7.    def name_=(newName: String) = fields.name = newName  
  8.    def password = fields.password  
  9.    def password_=(newPassword: String) = fields.password = newPassword  
  10.  } 

或者,對于一個類來說,可以為相等關系或hashCode自動定義可被重用的方法

  1. class User(name0: String, password0: String) {  
  2.   private case class Fields(var name: String, var password0: String)  
  3.   private object fields extends Fields(name0, password0)  
  4.  
  5.  
  6.   def name = fields.name  
  7.   def name_=(newName: String) = fields.name = newName  
  8.   def password = fields.password  
  9.   def password_=(newPassword: String) = fields.password = newPassword  

子類化

  1. case class Customer(name: String)  
  2.  
  3. class ValidatingCustomer(name0: String) extends Customer(name0) {  
  4.   require(name0.length < 5)  
  5.  
  6.   def name_=(newName : String) =  
  7.     if (newName.length < 5) error("too short")  
  8.     else super.name_=(newName)  
  9. }  
  10.  
  11. val cust = new ValidatingCustomer("xyz123"

6. 用法錯誤

忘記類型擦除(type erasure)。當你聲明了一個類C[A]、一個泛型T[A]或者一個函數或者方法m[A]后,A在運行時并不存在。這意味著,對于實例來講,任何參數都將被編譯成AnyRef,即使編譯器能夠保證在編譯過程中類型不會被忽略掉。

這也意味著在編譯時你不能使用類型參數A。例如,下面這些代碼將不會工作:

  1. def checkList[A](l: List[A]) = l match {  
  2.   case _ : List[Int] => println("List of Ints")  
  3.   case _ : List[String] => println("List of Strings")  
  4.   case _ => println("Something else")  

在運行時,被傳遞的List沒有類型參數。 而List[Int]和List[String]都將會變成List[_]. 因此只有第一種情況會被調用。

你也可以在一定范圍內不使用這種方法,而采用實驗性的特性Manifest, 像這樣:

  1. def checkList[A](l: List[A])(implicit m: scala.reflect.Manifest[A]) = m.toString match {  
  2.   case "int" => println("List of Ints")  
  3.   case "java.lang.String" => println("List of Strings")  
  4.   case _ => println("Something else")  

#p#

7. 設計錯誤

Implicit關鍵字的使用不小心。Implicits非常強大,但要小心,普通類型不能使用隱式參數或者進行隱匿轉換。

例如,下面一個implicit表達式:

  1. implicit def string2Int(s: String): Int = s.toInt 

這是一個不好的做法,因為有人可能錯誤的使用了一個字符串來代替Int。對于上面的這種情況,更好的方法是使用一個類。

  1. case class Age(n: Int)  
  2. implicit def string2Age(s: String) = Age(s.toInt)  
  3. implicit def int2Age(n: Int) = new Age(n)  
  4. implicit def age2Int(a: Age) = a.n 

這將會使你很自由的將Age與String或者Int結合起來,而不是讓String和Int結合。類似的,當使用隱式參數時,不要像這樣做:

  1. case class Person(name: String)(implicit age: Int) 

這不僅因為它容易在隱式參數間產生沖突,而且可能導致在毫無提示情況下傳遞一個隱式的age, 而接收者需要的只是隱式的Int或者其它類型。同樣,解決辦法是使用一個特定的類。

另一種可能導致implicit用法出問題的情況是有偏好的使用操作符。你可能認為”~”是字符串匹配時最好的操作符,而其他人可能會使用矩陣等價(matrix equivalence),分析器連接等(符號)。因此,如果你使用它們,請確保你能夠很容易的分離其作用域。

8. 設計錯誤

設計不佳的等價方法。尤其是:

◆試著使用“==”代替“equals”(這讓你可以使用“!=”)

◆使用這樣的定義:

  1. def equals(other: MyClass): Boolean 

而不是這樣的:

  1. override def equals(other: Any): Boolean  
  2.   

◆忘記重載hashCode,以確保當a==b時a.hashCode==b.hashCode(反之不一定成立)。

◆不可以這樣做交換: if a==b then b==a。特別地,當考慮子類化時,超類是否知道如何與一個子類進行對比,即使它不知道該子類是否存在。如果需要請查看canEquals的用法。

◆不可以這樣做傳遞: if a==b and b ==c then a==c。

9. 用法錯誤

在Unix/Linux/*BSD的系統中,對你的主機進行了命名卻沒有在主機文件中聲明。特別的,下面這條指令不會工作:

  1. ping `hostname`  
  2.   

#t#在這種情況下,fsc和scala都不會工作,而scalac則可以。這是因為fsc運行在背景模式下,通過TCP套接字監聽連接來加速編譯,而scala卻用它來加快腳本的執行速度。

10.風格錯誤

使用while。雖然它有自己的用處,但大多數時候使用for往往更好。在談到for時,用它們來產生索引不是一個好的做法。

避免這樣的使用:

  1. def matchingChars(string: String, characters: String) = {  
  2.   var m = "" 
  3.   for(i <- 0 until string.length)  
  4.     if ((characters contains string(i)) && !(m contains string(i)))  
  5.       m += string(i)  
  6.   m  

而應該使用:

  1. def matchingChars(string: String, characters: String) = {  
  2.   var m = "" 
  3.   for(c <- string)  
  4.     if ((characters contains c) && !(m contains c))  
  5.       m += c  
  6.   m  

如果有人需要返回一個索引,可以使用下面的形式來代替按索引迭代的方法。如果對性能有要求,它可以較好的應用在投影(projection)(Scala 2.7)和視圖(Scala 2.8)中。

  1. def indicesOf(s: String, c: Char) = for {  
  2.   (sc, index) <- s.zipWithIndex  
  3.   if c == sc  
  4. } yield index   

【51CTO.com譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com,且不得修改原文內容。】

原文:10 Scala Programming Pitfalls  作者:mitchp

責任編輯:yangsai 來源: 51CTO.com
相關推薦

2013-10-23 14:34:15

2024-08-16 21:38:43

Python代碼編程

2010-08-16 13:51:22

DIV+CSS

2013-04-27 17:09:29

安全管理IT技術

2010-10-26 10:16:36

求職

2015-06-08 13:51:56

WiFi

2011-06-07 15:34:15

2020-08-13 06:43:41

React前端開發

2014-02-13 11:06:52

系統架構移動互聯網

2014-02-14 16:23:03

移動互聯網系統架構

2023-06-08 00:16:58

2010-08-26 08:55:08

IE6CSS兼容性

2010-08-18 13:13:04

CSS兼容性IE6

2015-02-05 08:48:07

云遷移云資源管理

2018-10-31 08:55:02

2009-07-21 10:04:57

Scala編程語言

2024-03-04 13:23:00

數字化轉型

2025-01-06 00:02:51

2020-03-16 09:00:00

Linux郵件客戶端

2011-04-29 10:37:01

CRM
點贊
收藏

51CTO技術棧公眾號

久久丁香四色| a在线免费观看| 丝袜美腿亚洲一区| 按摩亚洲人久久| 无码国产精品一区二区免费式直播| 麻豆成全视频免费观看在线看| 久久久精品日韩欧美| 成人天堂噜噜噜| 日韩三级av在线| 日韩成人免费| 亚洲精品福利免费在线观看| 在线看的黄色网址| 丁香花在线观看完整版电影| 欧美激情一区二区三区| 国产精品久久久久久久久久直播 | 欧美一区二区在线免费观看| 99爱视频在线| 午夜伦理大片视频在线观看| 久久久久国产成人精品亚洲午夜| 亚洲aa中文字幕| 无码日韩精品一区二区| 欧美日本一区二区视频在线观看 | 欧美性suv| 亚洲一区二区av在线| 亚洲欧美日韩精品久久久| 日本久久一级片| 激情图区综合网| 日本在线观看天堂男亚洲 | 午夜久久久久久久| 九九99久久精品在免费线bt| 欧美午夜精品久久久久久超碰| 黄色一级视频片| 污污视频在线| 亚洲欧美一区二区三区久本道91| 日韩中文一区| 男人久久精品| 99久久综合狠狠综合久久| 亚洲字幕一区二区| 一级黄色片免费| 日韩av中文字幕一区二区三区| 亚洲97在线观看| 麻豆一区二区三区精品视频| 亚洲h色精品| 深夜福利91大全| 国产123在线| 神马电影久久| 亚洲图片制服诱惑| 久久精品成人av| 日韩深夜影院| 日韩精品黄色网| 亚洲av网址在线| 欧美亚洲国产日韩| 亚洲国产古装精品网站| 国产女人18毛片水真多18| 99久久人爽人人添人人澡| 欧美人牲a欧美精品| 三级视频中文字幕| 精品176极品一区| 欧美熟乱第一页| 一道本在线免费视频| 99久久亚洲国产日韩美女| 日本福利一区二区| 校园春色 亚洲色图| 成人黄色免费观看| 欧美精品乱人伦久久久久久| 天天看片天天操| 麻豆一区在线| 精品国产91亚洲一区二区三区婷婷| 丰满人妻一区二区三区免费视频棣| 一区二区三区视频播放| 亚洲国产欧美日韩精品| 99久久人妻精品免费二区| 亚洲婷婷影院| 自拍亚洲一区欧美另类| 国产性xxxx| 亚洲国产91| 欧美专区福利在线| 中文字幕手机在线视频| 麻豆91精品91久久久的内涵| 91成人免费看| 亚洲色偷精品一区二区三区| 国产欧美日韩三级| 爱爱爱视频网站| а√在线中文网新版地址在线| 欧美日韩国产在线播放| 另类小说第一页| 精品久久国产一区| 国产丝袜一区二区三区| 一级片久久久久| 欧美日本不卡| 国产成人亚洲综合青青| 国产草草影院ccyycom| 99国产精品久久久久久久久久久 | 成年人视频在线免费观看| 一区免费观看视频| 91精品国产91久久久久麻豆 主演| 惠美惠精品网| 日韩一级二级三级精品视频| 天天躁日日躁aaaxxⅹ | 亚洲天堂av在线免费| 四虎永久免费在线| 国产精品色网| 99re热精品| 91在线直播| 精品久久久久久国产91| 亚洲自拍第三页| 九九视频精品全部免费播放| 久久艳片www.17c.com| 成人毛片在线播放| 国产99久久久国产精品潘金| 天天综合狠狠精品| 18aaaa精品欧美大片h| 欧美乱妇15p| 97伦伦午夜电影理伦片| 欧美一区在线看| 国产精品日韩欧美| 五月婷婷六月丁香综合| 亚洲精品日产精品乱码不卡| 人人爽人人av| 亚州精品视频| 久久人人看视频| 国产黄色片网站| 亚洲国产精品激情在线观看| 六月丁香婷婷激情| 国产精品毛片久久久| 另类图片亚洲另类| 亚洲最大成人在线视频| 国产午夜精品久久久久久免费视| 久操网在线观看| 精品一区二区三区中文字幕视频| 丝袜美腿精品国产二区| 波多野结衣高清在线| 91老师片黄在线观看| 日韩中文字幕在线免费| 亚洲1区在线观看| 不用播放器成人网| 91极品身材尤物theporn| 久久久精品免费网站| 日本日本19xxxⅹhd乱影响| 在线播放一区二区精品视频| 欧美插天视频在线播放| 国产精品无码白浆高潮| 国产精品毛片久久久久久久 | 国产成人综合视频| 亚洲av综合色区| www欧美在线观看| 美女少妇精品视频| 精品国产伦一区二区三区| 亚洲视频综合在线| 手机在线国产视频| 亚洲欧美色图| 91久热免费在线视频| 激情成人四房播| 欧美一区二区在线视频| 欧美爱爱小视频| 国产精品一区二区果冻传媒| 久久久久久久香蕉| 国产精品qvod| 欧美综合一区第一页| 九色视频网站在线观看| 欧美亚洲自拍偷拍| 久久久久久天堂| 中文字幕中文在线| 高清毛片在线看| 色中色一区二区| 色欲狠狠躁天天躁无码中文字幕 | 一区二区三区精品99久久| 欧美国产一级片| 中文字幕va一区二区三区| 爱情岛论坛亚洲首页入口章节| 色88久久久久高潮综合影院| 亚洲aⅴ日韩av电影在线观看| 免费毛片在线看片免费丝瓜视频 | 好吊色视频在线观看| 成人免费观看av| 波多野结衣50连登视频| 国产亚洲一卡2卡3卡4卡新区| 国产精品久久二区| 国产在线看片| 亚洲国产女人aaa毛片在线| 中文字幕高清在线免费播放| 国产精品久线观看视频| 免费不卡av网站| 亚洲欧美大片| 制服诱惑一区| 卡通动漫国产精品| 国产精品日韩电影| 91福利在线尤物| 中文字幕日韩精品在线| 亚洲av无码国产精品永久一区 | 日韩av片在线看| 久久在线免费| 国内精品视频在线播放| 成人日韩av| 992tv成人免费影院| 一本一道波多野毛片中文在线| 欧美成人aa大片| 香蕉污视频在线观看| 一区二区三区在线视频观看58| 人人妻人人澡人人爽人人精品| 久久99国产精品久久99果冻传媒| 福利视频一区二区三区四区| 成人区精品一区二区婷婷| caoporen国产精品| 成人国产一区| 91wwwcom在线观看| 182tv在线播放| 这里只有视频精品| 天堂在线中文资源| 日韩午夜激情免费电影| 中文在线最新版天堂| 亚洲va国产天堂va久久en| 中文字幕第69页| 久久影院视频免费| 日韩精品xxx| 久久激情五月激情| 亚洲乱码中文字幕久久孕妇黑人| 综合久久99| 亚洲永久激情精品| 精品中文字幕一区二区三区av| 懂色中文一区二区三区在线视频| 福利一区二区| 国产精品r级在线| 亚洲啊v在线| 国内精品久久久久久久| 在线xxxx| 欧美xxxx18国产| 毛片免费不卡| 日韩在线观看网站| 粉嫩av一区| 亚洲偷欧美偷国内偷| 无码精品一区二区三区在线| 精品国产一二三| 性做久久久久久久久久| 欧美一级国产精品| 国产精品永久久久久久久久久| 欧美午夜精品一区二区蜜桃 | 视频在线观看91| 久久久久久久久久久免费视频| 日韩视频在线一区二区三区 | 久久久久久av无码免费看大片| 狠狠色香婷婷久久亚洲精品| 色网站在线播放| 午夜精品一区二区三区免费视频| 免费观看一级视频| 亚洲h在线观看| 亚洲一区 视频| 黄色一区二区在线观看| 奇米影视第四色777| 午夜激情一区二区三区| 日本熟妇色xxxxx日本免费看| 亚洲国产精品自拍| 久久狠狠高潮亚洲精品| 精品久久久久久久久久ntr影视| 日韩伦人妻无码| 欧美日韩一区二区精品| 草莓视频18免费观看| 欧美色偷偷大香| 国产一区二区在线视频观看| 91麻豆精品国产综合久久久久久 | 国产不卡视频一区| 美女被爆操网站| 成人av网址在线| 三级男人添奶爽爽爽视频| 2021中文字幕一区亚洲| 久久亚洲无码视频| 亚洲欧洲韩国日本视频| 久草综合在线视频| 亚洲午夜电影在线观看| 久久精品视频1| 欧美日韩精品久久久| 国产美女主播在线观看| 欧美v国产在线一区二区三区| 无码国产精品一区二区色情男同| 国产视频自拍一区| 日本在线人成| 欧美福利视频在线| 超碰国产一区| 成人黄色中文字幕| 国产精品男女| 视频一区三区| 欧美日韩综合| 日本在线观看a| 国精品**一区二区三区在线蜜桃| 中国男女全黄大片| 国产午夜亚洲精品理论片色戒| 我要看黄色一级片| 亚洲444eee在线观看| 中文区中文字幕免费看| 日韩三级高清在线| 狠狠狠综合7777久夜色撩人| 久久躁狠狠躁夜夜爽| 亚洲欧美se| 亚洲精品欧美日韩| 九色精品91| 久久亚洲a v| 日韩一区精品字幕| 无码人妻丰满熟妇区毛片蜜桃精品 | 日本福利专区在线观看| 亚洲18私人小影院| 深夜日韩欧美| 欧美精品七区| 欧美视频久久| 五月天视频在线观看| 91日韩在线专区| 亚洲av鲁丝一区二区三区| 在线观看一区二区视频| 少妇高潮一区二区三区69| 精品国产美女在线| 中文字幕资源网在线观看免费 | 亚洲免费观看在线| 中文一区在线播放| 亚洲第一精品在线观看| 欧美一卡二卡三卡| 二区在线观看| 2019中文在线观看| 8848成人影院| 中文字幕第一页亚洲| 日韩精品三区四区| a视频免费观看| 亚洲韩国一区二区三区| 国产口爆吞精一区二区| 伊人久久五月天| 电影一区二区三| 精品亚洲第一| 日韩亚洲精品在线| 在线播放av网址| 一区二区三区欧美| 国产三级午夜理伦三级| 色偷偷噜噜噜亚洲男人的天堂| www.com.cn成人| 久久久水蜜桃| 亚洲在线一区| 免费无码一区二区三区| 午夜视频在线观看一区二区| 不卡视频在线播放| 欧美成人中文字幕| 国产日韩欧美中文在线| 9999在线观看| 国产综合久久久久久久久久久久| 长河落日免费高清观看| 欧美中文字幕不卡| av在线资源站| 国产日韩欧美在线看| 久久精品久久久| 亚洲国产午夜精品| 亚洲欧美电影院| 国内精品国产成人国产三级| 欧美www在线| 高清精品视频| 免费成人在线视频网站| 久久综合久久综合亚洲| 日本高清不卡码| 一个人看的www久久| 91精品国产66| 在线观看一区二区三区三州| 狠狠色丁香婷婷综合久久片| 国产日韩欧美在线观看视频| 日韩视频一区二区| av影视在线| 欧美区高清在线| 美腿丝袜亚洲色图| 欧美日韩在线国产| 亚洲国内精品在线| 欧美舌奴丨vk视频| 亚洲精品在线视频观看| 国产在线一区观看| 国产亚洲欧美久久久久| 日韩成人在线视频| 精品三区视频| 福利在线小视频| 91丨porny丨最新| 中文字幕在线观看国产| 欧美成人高清视频| 欧美一区自拍| 国产精品视频分类| 亚洲一区免费视频| 黄色片在线看| 亚洲专区中文字幕| 鲁大师成人一区二区三区| 美国一级黄色录像| 日韩欧美国产成人一区二区| 中文在线免费二区三区| 亚洲精品一卡二卡三卡四卡| 国产精品一区二区三区四区| 久久国产视频播放| 日韩亚洲国产中文字幕| japanese色系久久精品| 99免费视频观看| 亚洲精品国产a久久久久久| 欧美女同网站| 99re在线观看视频| 丝袜脚交一区二区| 好吊色视频在线观看| 国产一区二区三区视频免费| 亚洲日本视频在线| 青青青在线视频免费观看| 夜夜夜精品看看| 3d成人动漫在线| 久久精品国产精品青草色艺|