คำถามติดแท็ก typechecking

18
ตรวจสอบว่าวัตถุเป็นประเภทที่กำหนดใน Swift
AnyObjectฉันมีอาร์เรย์ที่ถูกสร้างขึ้นจาก ฉันต้องการวนซ้ำและหาองค์ประกอบทั้งหมดที่เป็นอินสแตนซ์ของอาร์เรย์ ฉันจะตรวจสอบว่าวัตถุเป็นประเภทที่กำหนดใน Swift ได้อย่างไร

11
คุณจะรู้ประเภทของวัตถุได้อย่างไร (ใน Swift)
เมื่อพยายามที่จะเข้าใจโปรแกรมหรือในบางมุมมันมีประโยชน์ที่จะสามารถรู้ได้ว่าจริงๆแล้วมันคืออะไร ฉันรู้ว่าตัวดีบั๊กสามารถแสดงข้อมูลบางอย่างให้คุณได้และคุณสามารถพึ่งพาการอนุมานเพื่อหลีกเลี่ยงการไม่ระบุประเภทในสถานการณ์เหล่านั้น แต่ถึงกระนั้นฉันก็อยากมีบางอย่างเหมือน Pythontype() dynamicType (ดูคำถามนี้ ) อัปเดต:สิ่งนี้มีการเปลี่ยนแปลงใน Swift เวอร์ชันล่าสุดobj.dynamicTypeตอนนี้ให้การอ้างอิงถึงประเภทและไม่ใช่อินสแตนซ์ของประเภทไดนามิก อันนี้ดูเหมือนจะมีแนวโน้มมากที่สุด แต่จนถึงขณะนี้ฉันยังไม่สามารถค้นหาชนิดที่แท้จริงได้ class MyClass { var count = 0 } let mc = MyClass() # update: this now evaluates as true mc.dynamicType === MyClass.self ฉันยังลองใช้การอ้างอิงคลาสเพื่อสร้างอินสแตนซ์ของวัตถุใหม่ซึ่งใช้งานได้ แต่มีข้อผิดพลาดเกิดขึ้นกับฉันว่าฉันต้องเพิ่มrequiredinitializer: การทำงาน: class MyClass { var count = 0 required init() { } } let …

3
การตรวจสอบประเภทคลาสใน TypeScript
ใน ActionScript เป็นไปได้ที่จะตรวจสอบประเภท ณ รันไทม์โดยใช้ตัวดำเนินการ is : var mySprite:Sprite = new Sprite(); trace(mySprite is Sprite); // true trace(mySprite is DisplayObject);// true trace(mySprite is IEventDispatcher); // true เป็นไปได้ไหมที่จะตรวจสอบว่าตัวแปร (ขยายหรือ) เป็นคลาสหรือส่วนต่อประสานกับ TypeScript หรือไม่? ฉันไม่พบอะไรเกี่ยวกับเรื่องนี้ในสเป็คภาษา มันควรจะมีเมื่อทำงานกับคลาส / อินเตอร์เฟส

3
พิมพ์คำอธิบายประกอบสำหรับ * args และ ** kwargs
ฉันกำลังลองใช้คำอธิบายประกอบชนิดของ Python พร้อมคลาสเบสที่เป็นนามธรรมเพื่อเขียนอินเตอร์เฟส มีวิธีการอธิบายประเภทที่เป็นไปได้*argsและ**kwargs? ตัวอย่างเช่นเราจะแสดงให้เห็นว่าข้อโต้แย้งที่สมเหตุสมผลกับฟังก์ชั่นนั้นเป็นได้intหรือintไม่? type(args)ให้Tupleเดาว่าฉันจะอธิบายชนิดเป็นUnion[Tuple[int, int], Tuple[int]]แต่ไม่ได้ผล from typing import Union, Tuple def foo(*args: Union[Tuple[int, int], Tuple[int]]): try: i, j = args return i + j except ValueError: assert len(args) == 1 i = args[0] return i # ok print(foo((1,))) print(foo((1, 2))) # mypy does not like this print(foo(1)) …

8
Java: Instanceof และ Generics
ก่อนที่ฉันจะดูโครงสร้างข้อมูลทั่วไปของฉันเพื่อหาดัชนีของค่าฉันต้องการดูว่ามันเป็นเพียงตัวอย่างของประเภทที่thisได้รับพารามิเตอร์หรือไม่ แต่ Eclipse บ่นเมื่อฉันทำสิ่งนี้: @Override public int indexOf(Object arg0) { if (!(arg0 instanceof E)) { return -1; } นี่คือข้อความแสดงข้อผิดพลาด: ไม่สามารถทำการตรวจสอบอินสแตนซ์เทียบกับพารามิเตอร์ type E ใช้แทนลบวัตถุเนื่องจากข้อมูลประเภททั่วไปจะถูกลบเมื่อรันไทม์ จะมีวิธีไหนดีกว่ากัน?


9
วิธีตรวจสอบว่าวัตถุ Ruby เป็นบูลีนหรือไม่
ฉันไม่สามารถตรวจสอบได้ว่าวัตถุนั้นเป็นบูลีนได้อย่างง่ายดายหรือไม่ ในรูบี้มีอะไรแบบนี้ไหม? true.is_a?(Boolean) false.is_a?(Boolean) ตอนนี้ฉันกำลังทำสิ่งนี้และต้องการย่อให้สั้นลง: some_var = rand(1) == 1 ? true : false (some_var.is_a?(TrueClass) || some_var.is_a?(FalseClass))
122 ruby  typechecking 

2
ผลรวมประเภท - ทำไมใน Haskell จึงเป็น `show (Int | Double)` ต่างจาก `(show Int) | (แสดงสองครั้ง) `
ทำไมสิ่งเหล่านี้จึงไม่เทียบเท่ากัน show $ if someCondition then someInt else some double และ if someCondition then show someInt else show someDouble ฉันเข้าใจว่าถ้าคุณแยกif ... elseส่วนในตัวอย่างแรกให้กับนิพจน์ด้วยตัวเองคุณจะไม่สามารถแสดงประเภทของมันด้วยประเภทผลรวมนิรนามชนิดของInt | Doubleสิ่งที่คุณสามารถทำได้อย่างง่ายดายใน TypeScript (กล่าวถึง TypeScript เพราะมันเป็น langauge ผมใช้บ่อยและประเภทสนับสนุนซำ) และจะต้องหันไปใช้ข้อมูลนั้นขึ้นอยู่กับว่ามันจะเรียกEithershow ตัวอย่างที่ฉันให้ที่นี่มีความสำคัญ แต่สำหรับฉันมันสมเหตุสมผลมากกว่าที่จะคิดว่า "โอเคเรากำลังจะแสดงบางสิ่งบางอย่างและสิ่งนั้นขึ้นอยู่กับsomeCondition" มากกว่า "โอเคถ้ามีเงื่อนไขจริงแล้วแสดงบางอย่าง สำหรับการทำซ้ำรหัสน้อย (ที่นี่แสดงซ้ำสองครั้ง แต่มันอาจจะเป็นฟังก์ชั่นการใช้งานที่ยาวนานและแทนที่จะif ... elseมี> 2 สาขาที่ต้องพิจารณา) ในใจของฉันมันควรจะง่ายสำหรับคอมไพเลอร์เพื่อตรวจสอบว่าแต่ละประเภทที่ทำให้ผลรวมประเภท (ที่นี่Int | Double) สามารถใช้เป็นพารามิเตอร์ในการshowทำงานและตัดสินใจว่าประเภทถูกต้องหรือไม่ ยิ่งไปกว่านั้นshowฟังก์ชั่นนั้นจะส่งคืนstringชนิดพารามิเตอร์เสมอดังนั้นคอมไพเลอร์ไม่จำเป็นต้องดำเนินการกับ "สาขา" …

1
เหตุใด“ เคล็ดลับข้อ จำกัด ” จึงไม่ทำงานในอินสแตนซ์ HasField ที่กำหนดด้วยตนเองนี้
ฉันมีรหัส (แปลก ๆ ที่ยอมรับ) ซึ่งใช้เลนส์และGHC บันทึก : {-# LANGUAGE DataKinds, PolyKinds, FlexibleInstances, UndecidableInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} module Main where import Control.Lens import GHC.Records data Glass r = Glass -- just a dumb proxy class Glassy r …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.