Ruby Standard Library เป็นชุดของโมดูลและคลาสที่มาพร้อมกับ Ruby แต่ไม่ได้เป็นส่วนหนึ่งของภาษานั้นเอง
ชั้นเรียนเหล่านี้มีสาธารณูปโภคที่หลากหลาย เช่น:
- การเข้ารหัส Base64
- การสร้างจำนวนเฉพาะ
- ความละเอียด DNS
ในบทความนี้ ผมจะนำเสนอ 5 คลาสเหล่านี้พร้อมตัวอย่างที่เป็นประโยชน์
คลาส Ruby Logger
หากคุณต้องการบันทึกข้อผิดพลาดหรือข้อความแก้ไขข้อบกพร่อง คุณได้ครอบคลุมถึง Logger
ชั้นเรียน
คลาสนี้มีทุกสิ่งที่คุณต้องการเพื่อเริ่มการบันทึก!
การใช้งาน Logger
คุณสามารถสร้าง Logger
. ได้ วัตถุ &ให้สตรีมเอาต์พุต (หรือชื่อไฟล์) เป็นพารามิเตอร์ จากนั้นคุณสามารถใช้ระดับการบันทึกต่างๆ เพื่อลงทะเบียนข้อความของคุณ
ระดับการบันทึกคือ:
- ดีบัก
- ข้อมูล
- เตือน
- ข้อผิดพลาด
- เสียชีวิต
ตัวอย่าง :
require 'logger' logger = Logger.new(STDOUT) logger.info 'testing...' logger.warn 'fun with Ruby :)'
สิ่งนี้สร้างผลลัพธ์ต่อไปนี้ :
I, [2016-05-14T15:50:21.367590 #12148] INFO -- : testing... W, [2016-05-14T15:50:21.846651 #12148] WARN -- : fun with Ruby 🙂
อักขระตัวแรกคือรูปแบบย่อของระดับการบันทึก (I สำหรับ Info, W สำหรับ Warn)... จากนั้นคุณมีเวลาประทับและ id กระบวนการปัจจุบัน (ซึ่งคุณสามารถรับใน Ruby โดยใช้ Process.pid
)
สุดท้าย คุณมีระดับการบันทึกแบบเต็มและข้อความจริง
คุณสามารถเปลี่ยนรูปแบบนี้ได้โดยการจัดเตรียมฟอร์แมตเตอร์ใหม่
การทำงานกับ Prime Numbers
บางทีคุณไม่จำเป็นต้องจัดการกับจำนวนเฉพาะในแต่ละวัน แต่ก็ยังดีที่จะรู้ (โดยเฉพาะถ้าคุณชอบความท้าทายในการเขียนโปรแกรม) ว่า Ruby มีการสนับสนุนที่ดีสำหรับพวกเขาผ่าน Prime
ชั้นเรียน
เมื่อคุณต้องการ Prime
มันจะเพิ่ม prime?
วิธีการ Fixnum
.
ตัวอย่าง :
require 'prime' 5.prime? # true 11.prime? # true 20.prime? # false
คลาสนี้ยังรวมถึงตัวสร้างจำนวนเฉพาะด้วย
ตัวอย่าง :
Prime.take(10) # [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
วิธีใช้คลาส StringIO
StringIO
คลาสช่วยให้คุณสร้างสตริงที่ทำงานเหมือน IO
วัตถุ
ซึ่งหมายความว่าคุณสามารถทำงานกับสตริงนี้ได้เหมือนกับว่าคุณกำลังอ่านจากไฟล์หรือ STDIN
(อินพุตมาตรฐาน)
นี่คือตัวอย่าง :
require 'stringio' io = StringIO.new io << 'test' io << 'code' puts io.string # "testcode"
สังเกตบางสิ่ง :
เมื่อคุณเพิ่มข้อมูลลงใน StringIO
วัตถุจะไม่เพิ่มช่องว่างหรือขึ้นบรรทัดใหม่สำหรับคุณ และเพื่อให้ได้สตริงจริง คุณต้องเรียก string
วิธีการ
นอกจากนี้ คุณยังใช้การจัดทำดัชนีอาร์เรย์เพื่อเข้าถึงอักขระแต่ละตัวไม่ได้ เช่นเดียวกับที่ทำกับสตริงปกติ
สิ่งนี้มีประโยชน์เมื่อใด
บางครั้งคุณอาจต้องการแทนที่ไฟล์หรืออ็อบเจ็กต์ IO อื่นๆ สำหรับอ็อบเจ็กต์อื่นที่คุณควบคุมได้มากกว่า ตัวอย่างเช่น ในสภาพแวดล้อมการทดสอบ คุณสามารถแทนที่ STDOUT
ด้วย StringIO
วัตถุ
คุณสามารถดูตัวอย่างโลกแห่งความเป็นจริงจาก Rails ได้ที่นี่:https://github.com/rails/rails/blob/52ce6ece8c8f74064bb64e0a0b1ddd83092718e1/activesupport/test/logger_test.rb
การเข้ารหัสและถอดรหัส Base64
Base64 เป็นรูปแบบการเข้ารหัสที่พบได้ทั่วไปบนอินเทอร์เน็ต
หน้าตาเป็นแบบนี้ :
"cnVieQ=="
ทำไมถึงมีประโยชน์?
URL อนุญาตให้มีชุดอักขระที่จำกัด บางครั้งคุณต้องการรวมอักขระเหล่านั้น &Base64 ทำให้สิ่งนี้เป็นไปได้
วิธีเข้ารหัสมีดังนี้:
require 'base64' Base64.encode64("ruby") "cnVieQ=="
นี่คือวิธีการถอดรหัส:
require 'base64' Base64.decode64("cnVieQ==") "ruby"
การทำงานกับเส้นทาง
Pathname
class wraps ยูทิลิตี้การสำรวจระบบไฟล์ต่างๆ เช่น Dir
&File
, ในคลาสที่ทรงพลังกว่ามาก
แม้ว่าชื่อเมธอดจะเหมือนกัน แต่จะส่งคืน Pathname
วัตถุแทนสตริงหรืออาร์เรย์ และสิ่งนี้หมายความว่าคุณสามารถทำงานกับผลลัพธ์ด้วยวิธีการที่เกี่ยวข้องกับไฟล์ทั้งหมดได้
นี่เป็นตัวอย่างที่ดี :
require 'pathname' Pathname.glob("*").count(&:directory?)
หากคุณลองทำสิ่งนี้ด้วย Dir
คุณจะต้องใช้รหัสนี้ซึ่งไม่สวยหรู
Dir.glob("*").count { |d| File.directory?(d) }
ลองทำสิ่งนี้ในครั้งต่อไปที่คุณต้องทำงานเกี่ยวกับระบบไฟล์ 🙂
บทสรุป
ฉันหวังว่าคุณจะพบว่าตัวอย่างเหล่านี้มีประโยชน์! อย่าลืมสำรวจไลบรารีมาตรฐานอีกเล็กน้อยเพื่อเรียนรู้ว่าห้องสมุดสามารถทำอะไรให้คุณได้บ้าง
อย่าลืมแชร์โพสต์นี้หากคุณชอบ 🙂