เมทริกซ์จำกัดใน Ruby

เหตุใดคลาส Matrix จึงไม่มีวิธีแก้ไขเวกเตอร์และส่วนประกอบ ดูเหมือนว่าทุกอย่างในเมทริกซ์สามารถอ่านได้แต่เขียนไม่ได้ ฉันผิดหรือเปล่า? มีคลาส Matrix ที่สง่างามของบุคคลที่สามที่จะอนุญาตให้ฉันลบแถวและแก้ไขโดยเจตนาหรือไม่

กรุณาแจ้งให้ฉันทราบหากไม่มีชั้นเรียนดังกล่าว – ฉันจะหยุดค้นหา


person gmile    schedule 28.09.2009    source แหล่งที่มา
comment
คุณช่วยอธิบายสิ่งที่คุณกำลังทำกับมันได้ไหม?   -  person khelll    schedule 28.09.2009
comment
ฉันกำลังมองหาแถวและคอลัมน์ที่ 'ไม่ดี' (ซึ่งประกอบด้วยศูนย์ทั้งหมด) จากนั้นฉันต้องการลบออก ฉันมีรหัสอยู่แล้ว แต่เขียนผ่าน Arrays ทั้งหมด อย่างไรก็ตาม ฉันกำลังพยายามหาวิธีแก้ปัญหาที่แม่นยำและสวยกว่านี้   -  person gmile    schedule 28.09.2009


คำตอบ (1)


ผู้ออกแบบคลาส Matrix ต้องเป็นแฟนตัวยงของโครงสร้างข้อมูลที่ไม่เปลี่ยนรูปและการเขียนโปรแกรมเชิงฟังก์ชัน ใช่คุณถูกต้อง.

ไม่ว่าในกรณีใด มีวิธีแก้ไขง่ายๆ สำหรับสิ่งที่คุณต้องการ ใช้ Matrix สำหรับสิ่งที่สามารถทำได้ จากนั้นใช้ .to_a เพื่อรับอาร์เรย์จริง

>> Matrix.identity(2).to_a
=> [[1, 0], [0, 1]]

ดูเพิ่มเติมที่ Narray Ruby เชิงตัวเลข คุณสามารถ Monkeypatch คลาสเพื่อเพิ่มพฤติกรรมเพิ่มเติมได้ หากคุณทำเช่นนี้ โปรดแก้ไขคลาสย่อยของ Matrix (มีโปรเจ็กต์ไลบรารี Ruby จำนวนมากที่ต้องการพฤติกรรมเพิ่มเติมจากคลาส required ดังนั้นพวกเขาจึงแก้ไขโดยตรง ทำให้ไฟล์ใหม่ค่อนข้างเป็นพิษ พวกเขาสามารถแพตช์คลาสย่อยหรือคลาสซิงเกิลตันได้อย่างง่ายดาย)

โอ้ และ khelll (:-) คงอยากให้ฉันบอกว่ามีวิธีที่ค่อนข้างเป็นไปได้สำหรับคุณที่จะทำสิ่งใด คุณต้องการ ในรูปแบบการใช้งาน นั่นคือโดยการสร้างวัตถุใหม่แทนที่จะแก้ไขวัตถุเก่า

person DigitalRoss    schedule 28.09.2009
comment
+1 สำหรับการกล่าวถึงความไม่เปลี่ยนรูปและการเขียนโปรแกรมเชิงฟังก์ชัน นั่นคือเหตุผลที่ฉันถามว่าคุณต้องการทำอะไรกันแน่ เพราะควรมีวิธีการ แต่ไม่มีการแก้ไขเมทริกซ์ปัจจุบัน - person khelll; 28.09.2009