Tôi có một mô-đun nơi môi trường toàn cầu (xác định các ràng buộc nhất định như địa chỉ IP lân cận, v.v.) được tạo và khởi tạo bằng cách gọi hàm khởi tạo. Một số hàm tiếp theo nên sử dụng các ràng buộc này khi chúng được gọi.Biến toàn cầu và đơn vị đọc
Trong khi về nguyên tắc, tôi hiểu những gì mà người đọc độc giả làm tôi không hoàn toàn chắc chắn làm thế nào tôi có thể áp dụng điều này cho vấn đề của tôi, đặc biệt.
Cách sử dụng để khởi tạo môi trường do người dùng xác định và chuyển thành dữ liệu/đối số cho hàm khởi tạo. Ý tôi là, người đọc độc giả phải có được những giá trị thực sự tạo nên môi trường bất biến toàn cầu từ đâu đó. Tôi muốn rằng các giá trị được đọc từ một cuộc gọi chức năng Khởi tạo như
myinitial :: arg1 -> arg1 -> IOString
nơi sau đóarg1
vàarg2
trở thành toàn cầu dữ liệu bất biến thể truy cập đến các chức năng sau này thông qua đơn nguyên đầu đọc (?)Làm thế nào tôi có thể sử dụng các giá trị môi trường như các đối số chức năng ví dụ
recvFrom s arg1
trong đóarg1
là dữ liệu bất biến toàn cầu từ môi trường của tôi. Hoặcif arg2 > arg1 then ... else ...
Tôi có thể tạo tệp cấu hình, nhưng tôi cảm thấy rằng tệp cấu hình sẽ mất nhiều tính linh hoạt.
[Chỉnh sửa] Tôi hiểu về yêu cầu, nhưng không nên có thêm các cách "không giống như điểm" sao cho toàn cầu/môi trường không thay đổi có thể bị bỏ qua nếu chữ ký hàm đã được xác định đúng không? Làm cách nào để tôi có thể tái cấu trúc if-then-else của mình để áp dụng this.
Hoạt động một phần, như đã đề cập trong câu hỏi tôi có ** mô-đun ** có một số hàm; trong số đó là một hàm khởi tạo tạo môi trường. Các hàm từ mô đun được gọi sau này nên sử dụng môi trường. Điều đó có thể xảy ra với người đọc không? –
Nhưng cách này hoạt động như thế nào? Trong ví dụ của bạn/hàm khởi tạo sẽ nói một cái gì đó như 'let config = Config blabla' và một hàm tiếp theo sẽ cần phải làm' let result = runReader example config'; - tuy nhiên chức năng tiếp theo không biết 'config'. –
Kiểm tra [gist này] (https://gist.github.com/2924160) trong đó có một ví dụ đơn giản. Trong mô-đun 1, chúng tôi định nghĩa một hàm khởi tạo môi trường toàn cục và một số hàm phụ thuộc vào môi trường toàn cục. Module 2 chỉ chứa một hàm chính khởi tạo môi trường và gọi các hàm phụ thuộc vào nó bằng cách sử dụng 'runReader' (** Edit: ** xin lỗi, tôi đã xóa chú thích gốc mà bạn đã trả lời và thay thế nó bằng cái này.) –