Tôi đang tìm cách gọi các hàm một cách linh động dựa trên nội dung được tìm thấy trong danh sách liên kết.Làm thế nào để bạn gọi các hàm một cách linh hoạt với Haskell
Dưới đây là ví dụ về mã giả bán. listOfFunctions sẽ được chuyển đến callFunctions.
listOfFunctions = [('function one', 'value one')
, ('function two', 'value two')
, ('function three', 'value three')]
callFunctions x = loop through functions
if entry found
then call function with value
else do nothing
Điểm mấu chốt của câu hỏi không lặp qua danh sách, đúng hơn là cách gọi hàm khi tôi có tên?
Hãy xem xét trường hợp sử dụng này để làm rõ thêm. Bạn mở dấu nhắc lệnh và được trình bày với trình đơn sau đây.
1: Viết tập tin vhost mới
2: Thoát
Bạn ghi các file vhost mới và không được trình bày với một menu mới
1: Nhập chỉ thị mới
2: Viết tệp
3: Thoát
Bạn nhập một số chỉ thị mới cho vHost và bây giờ đã sẵn sàng để ghi tệp.
Chương trình sẽ không viết một cách mù quáng mỗi và mọi chỉ thị mà nó có thể, thay vào đó, nó sẽ chỉ viết những cái mà bạn đã cung cấp. Đây là nơi mà danh sách liên kết xuất hiện. Viết một câu lệnh if/then/else hoặc case to là điên rồ. Nó sẽ được nhiều hơn nữa thanh lịch để lặp qua danh sách, tìm các chỉ thị đã được thêm vào và gọi các chức năng để viết chúng cho phù hợp.
Do đó, lặp lại, tìm tên hàm, gọi hàm đã biết với giá trị được cung cấp.
Nhờ bất kỳ ai có thể trợ giúp với điều này.
Edit:
Dưới đây là giải pháp mà tôi đã đưa ra (phê bình mang tính xây dựng luôn được chào đón).
Tôi đã xuất các hàm viết chỉ thị trong danh sách liên kết vì mọi câu trả lời được cung cấp cho biết rằng chỉ cần bao gồm hàm là cách để đi.
funcMap = [("writeServerName", writeServerName)
,("writeServeralias", writeServerAlias)
,("writeDocRoot", writeDocRoot)
,("writeLogLevel", writeErrorLog)
,("writeErrorPipe", writeErrorPipe)
,("writeVhostOpen", writeVhostOpen)]
Trong tệp thực sự ghi máy chủ, tệp đó được nhập.
Tôi có một danh sách liên kết gọi là hostInfo để mô phỏng một số giá trị giả mà sẽ được thu thập từ một người dùng cuối và một chức năng gọi là runFunction trong đó sử dụng các kỹ thuật được cung cấp bởi edalorzo để lọc thông qua cả hai danh sách. Bằng cách khớp trên các khóa của cả hai danh sách, tôi đảm bảo rằng hàm đúng được gọi với giá trị đúng.
import Vhost.Directive
hostInfo = [("writeVhostOpen", "localhost:80")
,("writeServerName", "norics.com")]
runFunctions = [f val | (mapKey, f) <- funcMap, (key, val) <- hostInfo, mapKey == key]
Tôi biết rằng bạn có nhiều phiếu bầu hơn cho câu trả lời của mình, tuy nhiên, vì tôi đã sử dụng mã của edalorzo, tôi đã chấp nhận câu trả lời của anh ấy. – OpCodeOmega