2015-01-19 19 views
8

Thấy rằng bạn có thể giới hạn các tham số của hàm cho các kiểu dữ liệu cụ thể, nó có nghĩa là bạn có thể muốn định nghĩa kiểu dữ liệu của riêng mình, nhưng tôi không thể thấy bất kỳ điều gì trong tài liệu Rebol. trông không tốt lắm).Làm thế nào để bạn xác định datatype của riêng bạn trong Rebol?

mytype!: make datatype! ... ; some spec here 

Đây có phải là có thể:

khả năng để làm một cái gì đó như sau Những gì tôi mong đợi là gì? Sau đây không điền vào tôi với nhiều hy vọng:

http://www.rebol.it/giesse/custom-types.r

Từ liên kết:

Mục đích: { Cho phép các lập trình viên để xác định kiểu dữ liệu tùy chỉnh REBOL }

Nó là một đoạn mã khá dài. Không phải những gì tôi đã hy vọng.

Trả lời

4

Thường được đề xuất, kể từ hôm nay không được triển khai available only as an experimental patch by Giulio.

Bất kỳ đề xuất tùy chỉnh datatype hữu ích thường đi cùng với mong muốn treo chúng trong để họ có thể có hiệu quả "quá tải" những thứ như + hoặc thêm. Có một lớp trừu tượng bên trong được gọi là một hành động ! rằng về mặt lý thuyết cung cấp một nơi để đặt những móc:

>> type? :append 
== action! 

Hành động là một loại "lời gọi phương thức" (ví dụ: đa hình) trên số đầu tiên, mà các thông số tiếp theo được truyền. Hiện tại không có cách nào để người dùng có thể tạo hành động hoặc tạo một kiểu dữ liệu mới đáp ứng chúng.

Đối với Rebol 3, kiểu dữ liệu do người dùng xác định được đề xuất dưới biệt danh "utype" - xem "What's known about UTYPE! in Rebol?" để biết thêm.

Trong objects announcement for Red, tuy nhiên, tôi nhận thấy một số chữ in nhỏ ở cuối:

Nhằm giúp trình biên dịch Red sản xuất mã ngắn hơn và nhanh hơn, một chỉ thị #alias biên soạn mới sẽ được giới thiệu. Chỉ thị này sẽ cho phép người dùng chuyển định nghĩa đối tượng thành loại "ảo" có thể được sử dụng trong các khối đặc tả kiểu. Ví dụ:

#alias book!: object [ 
    title: author: year: none 
    banner: does [form reduce [author "wrote" title "in" year]] 
] 

display: func [b [book!]][ 
    print b/banner 
] 

Việc bổ sung này sẽ không chỉ cho phép kiểm tra loại đối số mịn hơn mà còn giúp người dùng ghi lại mã của họ tốt hơn.

5

Cố gắng một thực hiện utypes trong https://github.com/giuliolunati/rebol/tree/utype

Như một ví dụ, tôi thực hiện complex! utype

Về cơ bản, utypes được thực hiện như đối tượng với phương pháp đặc biệt trong hình thức chấm: như vậy, .add thực hiện các + op v.v.

Hiện tại bạn có thể quá tải mọi hành động (nhưng thực hiện) và một số người bản địa (chức năng toán học, so sánh, biểu mẫu, khuôn, in, thăm dò)

Các vấn đề liên quan