มาจากพื้นหลัง OOP (Java) ฉันกำลังเรียน Scala ด้วยตัวเอง ในขณะที่ฉันสามารถเห็นข้อดีของการใช้วัตถุที่ไม่เปลี่ยนรูปแบบรายบุคคล แต่ฉันมีเวลายากที่จะเห็นว่าใครสามารถออกแบบแอปพลิเคชันทั้งหมดเช่นนั้นได้ ฉันจะให้ตัวอย่าง:
ว่าฉันมีวัตถุที่แสดงถึง "วัสดุ" และคุณสมบัติของพวกเขา (ฉันกำลังออกแบบเกมดังนั้นจริง ๆ แล้วฉันมีปัญหานั้น) เช่นน้ำและน้ำแข็ง ฉันจะมี "ผู้จัดการ" ที่เป็นเจ้าของอินสแตนซ์ของวัสดุดังกล่าวทั้งหมด หนึ่งคุณสมบัติจะเป็นจุดเยือกแข็งและจุดหลอมเหลวและสิ่งที่วัสดุค้างหรือละลาย
[แก้ไข] ทุกกรณีวัสดุคือ "ซิงเกิลตัน" เช่นเดียวกับ Java Enum
ฉันต้องการให้ "น้ำ" บอกว่าค้างเป็น "น้ำแข็ง" ที่ 0C และ "น้ำแข็ง" เพื่อบอกว่ามันละลายเป็น "น้ำ" ที่ 1C แต่ถ้าน้ำและน้ำแข็งไม่เปลี่ยนรูปพวกเขาไม่สามารถรับค่าอ้างอิงซึ่งกันและกันเป็นพารามิเตอร์ตัวสร้างได้เนื่องจากจะต้องสร้างอย่างใดอย่างหนึ่งก่อนและไม่สามารถรับการอ้างอิงถึงพารามิเตอร์อื่น ๆ ที่ยังไม่ได้มีอยู่เป็นพารามิเตอร์ตัวสร้างได้ ฉันสามารถแก้ปัญหานี้ได้โดยให้ทั้งคู่อ้างอิงถึงผู้จัดการเพื่อให้พวกเขาสามารถสอบถามเพื่อค้นหาอินสแตนซ์วัสดุอื่น ๆ ที่พวกเขาต้องการทุกครั้งที่พวกเขาถูกถามถึงคุณสมบัติการแช่แข็ง / การหลอมเหลวของพวกเขา แต่แล้วฉันก็พบปัญหาเดียวกันระหว่างผู้จัดการ และวัสดุที่พวกเขาต้องการการอ้างอิงถึงแต่ละอื่น ๆ แต่มันสามารถให้ไว้ในตัวสร้างสำหรับหนึ่งในพวกเขาดังนั้นผู้จัดการหรือวัสดุที่ไม่สามารถเปลี่ยนไม่ได้
พวกเขาไม่มีทางแก้ไขปัญหานี้หรือฉันจำเป็นต้องใช้เทคนิคการเขียนโปรแกรม "ฟังก์ชั่น" หรือรูปแบบอื่น ๆ เพื่อแก้ไขหรือไม่
h2o
วัสดุ