Mỗi lần như vậy, tôi thường muốn áp dụng một tập hợp các hàm trên một số tập hợp tham số. Thật dễ dàng để làm với bản đồ và một chức năng rất đơn giản.Phiên bản tiêu chuẩn hoặc sử dụng thành ngữ (fn [f & args] (áp dụng f args))
(map
(fn invoke [f & args] (apply f args))
[- + *]
[1 2 3]
[1 2 3]
[1 2 3])
(-1 6 27)
Tìm kiếm trên web có một vài thư viện xác định chức năng tương tự, thường được gọi là funcall hoặc gọi. Bởi vì thiên hướng của Clojure cho các hàm variadic, tôi không thể không nghĩ rằng nên có một phiên bản mặc định của hàm này.
Có hay không có cách nào khác để giải quyết các tình huống như thế này?
Edit:
hình thức khác có thể là
(map
(comp eval list)
[- + *]
[1 2 3]
[1 2 3]
[1 2 3])
(-1 6 27)
nào làm tôi sợ vì eval.
Vì vậy, những gì bạn nói là nếu tham số áp dụng cuối cùng là một số không, nó bằng cách nào đó được hiểu là một chuỗi? (áp dụng + 1 2 3 nil) không hoạt động. Khá thú vị, tôi hy vọng thats cố ý mặc dù bởi vì nó có thể đến trong RẤT tiện dụng. – NielsK
Có - nil được coi là một chuỗi rỗng khá nhiều trong suốt Clojure. ví dụ. (vec nil) => [] hoặc (seq []) => nil. Bạn có thể dựa vào hành vi này. – mikera