Saya suka jawaban Myron tetapi menderita penyakit Ruby "Saya tidak lagi menggunakan Java / C # jadi saya tidak akan pernah menggunakan warisan lagi" . Membuka kelas apa pun bisa penuh dengan bahaya dan harus digunakan dengan hemat, terutama ketika itu bagian dari perpustakaan inti Ruby. Saya tidak mengatakan jangan pernah menggunakannya, tetapi biasanya mudah dihindari dan ada pilihan yang lebih baik, misalnya
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
Kemudian ketika Anda ingin menggunakan string yang bisa berupa angka, jelas apa yang Anda lakukan dan Anda tidak mengalahkan kelas inti apa pun, misalnya
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.
Anda dapat menambahkan segala macam pemeriksaan lain di inisialisasi, seperti memeriksa angka-angka biner dll. Namun yang utama, adalah bahwa Ruby adalah untuk orang-orang dan bagi orang-orang berarti kejelasan . Memberi nama objek melalui nama variabelnya dan nama kelasnya membuat segalanya menjadi lebih jelas.
^
dan$
memiliki arti yang agak berbeda sebagai metachar dari pada kebanyakan rasa regexp lainnya. Anda mungkin bermaksud menggunakan\A
dan\Z
sebagai gantinya.