ฉันกำลังเรียนรู้ Ruby และพบfailคีย์เวิร์ด หมายความว่าอย่างไร?
if password.length < 8
fail "Password too short"
end
unless username
fail "No user name set"
end
ฉันกำลังเรียนรู้ Ruby และพบfailคีย์เวิร์ด หมายความว่าอย่างไร?
if password.length < 8
fail "Password too short"
end
unless username
fail "No user name set"
end
fail "Password too short" if password.length < 8และfail "No user name set" unless username
คำตอบ:
ใน Ruby failมีความหมายเหมือนกันกับraise. failคำหลักเป็นวิธีการที่โมดูลซึ่งรวมโดยชั้นเรียนKernel วิธีการทำให้เกิดข้อผิดพลาด runtime เช่นเดียวกับคำหลักObjectfailraise
failวิธีมีสาม overloads:
fail: เพิ่มข้อความRuntimeErrorโดยไม่มีข้อผิดพลาด
fail(string): เพิ่มRuntimeErrorอาร์กิวเมนต์สตริงเป็นข้อความแสดงข้อผิดพลาด:
fail "Failed to open file"
fail(exception [, string [, array]]): เพิ่มข้อยกเว้นของคลาสexception(อาร์กิวเมนต์แรก) พร้อมด้วยข้อความแสดงข้อผิดพลาด (อาร์กิวเมนต์ที่สอง) และข้อมูลการเรียกกลับ (อาร์กิวเมนต์ที่สาม)
ตัวอย่าง: สมมติว่าคุณกำหนดฟังก์ชันที่ควรล้มเหลวหากได้รับอาร์กิวเมนต์ที่ไม่ดี จะดีกว่าที่จะเพิ่มArgumentErrorและไม่RuntimeError:
fail ArgumentError, "Illegal String"
อีกตัวอย่างหนึ่ง: คุณสามารถส่งผ่านbacktraceทั้งหมดไปยังfailเมธอดเพื่อให้คุณสามารถเข้าถึงการติดตามภายในrescueบล็อก:
fail ArgumentError, "Illegal String", caller
callerเป็นวิธี Kernel file:line: in 'method'ซึ่งผลตอบแทนการติดตามย้อนหลังเป็นอาร์เรย์ของสตริงในรูปแบบที่
โดยไม่มีข้อโต้แย้งให้ยกข้อยกเว้นเป็น $! หรือเพิ่ม RuntimeError ถ้า $! เป็นศูนย์ ด้วยอาร์กิวเมนต์สตริงเดียวเพิ่ม RuntimeError ด้วยสตริงเป็นข้อความ มิฉะนั้นพารามิเตอร์แรกควรเป็นชื่อของคลาส Exception (หรืออ็อบเจ็กต์ที่ส่งคืนอ็อบเจ็กต์ Exception เมื่อส่งข้อความยกเว้น) พารามิเตอร์ที่สองซึ่งเป็นทางเลือกจะตั้งค่าข้อความที่เกี่ยวข้องกับข้อยกเว้นและพารามิเตอร์ที่สามคืออาร์เรย์ของข้อมูลการเรียกกลับ ข้อยกเว้นถูกจับโดยอนุประโยคการช่วยเหลือของ start ... end block
raise
Rubocopกล่าวเกี่ยวกับการใช้ทั้งสองคำ
'ใช้
failแทนraiseสัญญาณข้อยกเว้น''ใช้
raiseแทนfailการยกเลิกข้อยกเว้น'
นี่คือตัวอย่าง
def sample
fail 'something wrong' unless success?
rescue => e
logger.error e
raise
end
fail == raise
กล่าวอีกนัยหนึ่งfailเป็นเพียงนามแฝงยอดนิยมสำหรับraiseวิธีการเพิ่มข้อผิดพลาด การใช้งาน:
fail ArgumentError, "Don't argue with me!"
www.ruby-doc.orgคือเพื่อนของคุณ เมื่อฉัน googled rubydoc fail" Kernel " เป็นครั้งแรก คำแนะนำของฉันคือเมื่อมีข้อสงสัยให้ไปที่แหล่งที่มาที่ชัดเจนสำหรับคำจำกัดความเช่นนี้
raiseเมื่อจัดการข้อยกเว้นและfailเมื่อไม่