ผมชอบคำตอบของไมรอน แต่มันทนทุกข์ทรมานจากโรคทับทิม"ผมไม่ได้ใช้ Java / C # ดังนั้นฉันไม่เคยไปใช้มรดกอีกครั้ง" การเปิดคลาสใด ๆ อาจเต็มไปด้วยอันตรายและควรใช้อย่าง จำกัดโดยเฉพาะเมื่อเป็นส่วนหนึ่งของห้องสมุดหลักของรูบี้ ฉันไม่ได้บอกว่าไม่เคยใช้มัน แต่มักจะหลีกเลี่ยงได้ง่ายและมีตัวเลือกที่ดีกว่าเช่น
class IntegerInString < String
def initialize( s )
fail ArgumentError, "The string '#{s}' is not an integer in a string, it's just a string." unless s =~ /^\-?[0-9]+$/
super
end
end
จากนั้นเมื่อคุณต้องการใช้สตริงที่อาจเป็นตัวเลขได้ชัดเจนว่าคุณกำลังทำอะไรอยู่และคุณจะไม่ขัดขวางคลาสหลักใด ๆ เช่น
n = IntegerInString.new "2"
n.to_i
# => 2
IntegerInString.new "blob"
ArgumentError: The string 'blob' is not an integer in a string, it's just a string.
คุณสามารถเพิ่มทุกประเภทของการตรวจสอบอื่น ๆ ในการเริ่มต้นเช่นการตรวจสอบเลขฐานสอง ฯลฯ สิ่งสำคัญ แต่เป็นที่ทับทิมเป็นคนและเป็นสำหรับคนที่หมายถึงความชัดเจน การตั้งชื่อวัตถุด้วยชื่อตัวแปรและชื่อคลาสทำให้สิ่งต่างๆชัดเจนขึ้น
^
และ$
มีความหมายที่แตกต่างกันอย่างละเอียดว่าเป็น metachars มากกว่าในรสชาติ regexp อื่น ๆ ส่วนใหญ่ คุณอาจหมายถึงการใช้\A
และ\Z
แทน