Tôi đang cố gắng kết hợp các chức năng với các sàng lọc theo cách chung chung để chúng có thể được gọi mà không cần sàng lọc. Ví dụ, thay vì ARRAY-INITIAL size value
ARRAY/INITIAL size value
Làm thế nào để bọc một chức năng với một sàng lọc để tinh lọc là không cần thiết?
wrap: function [refined [path!] args [block!]] [
function args compose [
(refined) (args)
]
]
array-initial wrap 'array/initial [size value]
Không quá lạ mắt. Dường như làm việc nói chung, nhưng điều này có cái gì lạ nếu bạn gọi nó là sử dụng một chức năng:
>> n: 0 array/initial 4 does [++ n]
== [10 11 12 13]
>> n: 10 array-initial 4 does [++ n]
== [10 10 10 10]
Khi tôi source
nó tôi có được điều này:
>> source array-initial
array-initial: make function! [[size value][array/initial size value]]
Được rồi, vì vậy những gì đang xảy ra là chức năng đang được gọi là được gọi trong trình bao bọc và kết quả của cuộc gọi được thông qua ... không phải là chức năng. Một giải pháp khác là sử dụng một từ để tránh đánh giá:
>> array-initial-2: function [size value] [array/initial size :value]
>> array-initial-2: 10 array-initial-2 4 does [++ n]
[10 11 12 13]
Nhưng tôi đang tìm cách tiếp cận chung. Cách tốt nhất để proxy các thông số mà không có điều này xảy ra là gì?
@ endo64 Bạn [thêm một bản sao] (http://stackoverflow.com/revisions/22892499/3) ... đó là chức năng Rebol2. Trong Rebol3 quyết định đã được thực hiện để loại bỏ hình thức FUNCTION ... nó bây giờ những gì đã từng được gọi là FUNCT. Thân thiện với người dùng hơn theo cách đó (và tương thích với Red). Đề nghị của tôi là về cơ bản chúng tôi chỉ cố gắng rìu tất cả các FUNCTION sử dụng trong các mẫu mã Rebol2 và sau đó chuyển đổi tất cả FUNCT thành FUNCTION trong Rebol3. – HostileFork
Ồ đúng, tôi quên điều đó. – endo64