ฉันกำลังเรียนรู้ 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 เช่นเดียวกับคำหลักObject
fail
raise
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
เมื่อไม่