คำถามติดแท็ก extension-method

13
มันไม่มีเหตุผลที่จะคาดหวังใด ๆ () * ไม่ * ที่จะโยนข้อยกเว้นอ้างอิงเป็นโมฆะ?
เมื่อคุณสร้างวิธีการขยายที่คุณสามารถทำได้แน่นอนว่าเรียกใช้บนnullแต่ไม่เหมือนกับการเรียกใช้วิธีการแบบอินสแตนซ์การเรียกใช้แบบ null ไม่จำเป็นต้องมีเครื่องหมายNullReferenceException-> คุณต้องตรวจสอบและโยนด้วยตนเอง สำหรับการดำเนินการตามวิธีส่วนขยายของ Linq Any()Microsoft ตัดสินใจว่าพวกเขาควรจะโยนArgumentNullException( https://github.com/dotnet/corefx/blob/master/src/System.Linq/src/System/Linq/AnyAll.cs ) มันทำให้ฉันต้องเขียน if( myCollection != null && myCollection.Any() ) ฉันผิดในฐานะลูกค้าของรหัสนี้ที่จะคาดหวังว่าเช่น((int[])null).Any()ควรกลับมาfalse?

3
ด้วยเหตุผลใดบ้างที่คุณจะใช้ส่วนขยายคลาสแยกต่างหากสำหรับตัวแทนแต่ละคนใน Swift
ฉันทำงานผ่านการสอนของ Ray Wenderlich และสังเกตว่าผู้เขียนใช้ส่วนขยายคลาสเพื่อระงับการโทรกลับแทนที่จะมอบหมายให้จัดการในคลาสเองเช่น: มอบหมาย callback ภายในส่วนขยายของชั้นเรียน: extension LogsViewController : UIPopoverPresentationControllerDelegate { func adaptivePresentationStyleForPresentationController(controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle { ... } } ตรงข้ามกับการมีอยู่ในชั้นเรียน: มอบหมายการเรียกกลับภายในชั้นเรียน: class LogsViewController : UITableViewController, UIPopoverPresentationControllerDelegate { func adaptivePresentationStyleForPresentationController(controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle { ... } } ฉันพบสิ่งนี้แปลกและน่าสนใจในเวลาเดียวกัน เขามีไฟล์เฉพาะสำหรับการขยายในคลาส LogsViewController ชื่อ "LogsViewControllerExtension.swift" และมีส่วนขยายที่แตกต่างกันสำหรับแต่ละโพรโทคอลของผู้แทน: UITableViewDataSource, UISplitViewDelegate …

4
โฟกัสหลักของ Java คืออะไร? เหตุใดจึงใช้เวลานานในการรับคุณลักษณะใหม่
ฉันได้รับการสำรวจคุณสมบัติใหม่ใน JDK8 เช่นการแสดงออกแลมบ์ดาวิธีการขยายและสตรีม API ใหม่ เห็นได้ชัดว่าไม่มีคุณสมบัติเหล่านี้ใหม่ในโลกการเขียนโปรแกรมและทำให้สงสัยว่าทำไมสิ่งเหล่านี้ได้รับใน Java จนถึงปัจจุบัน เรามีการแสดงออกแลมบ์ดาใน Lisp (1958), SML (1973), Haskell (1990), Python (1991), JavaScript (1994), Ruby (1995), Ruby (1995), Scala (2003), C # (2007) และ 55 ปีหลังจาก Lisp และ แทบทุกคนใน Java (2013) และฉันได้อ่านเกี่ยวกับสตรีมในSIC (1996) ฉันสงสัยว่าทำไมตอนนี้ หลักฐานแสดงให้เห็นว่าการแข่งขันกับภาษาอื่นไม่ใช่แรงจูงใจ ดูเหมือนว่าคุณสมบัติใหม่ ๆ ที่ยอดเยี่ยมใน Java รุ่นนี้เป็นเพียงผลพลอยได้จากการใช้งานแบบคู่ขนาน เรามี lambdas เพราะทำให้การเขียนอัลกอริทึมแบบขนานง่ายขึ้นและเรามีวิธีการขยายเนื่องจากเราต้องการให้พวกเขาให้การสนับสนุนการเปลี่ยนแปลงที่แสดงออกแลมบ์ดาที่ต้องการ ฯลฯ ฯลฯ …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.