2011-06-26 36 views
6

Có thể định nghĩa toán tử mới trong Groovy không? Tôi muốn thể hiện một giao dịch mà một người nào đó mua 200 mặt hàng với giá 10 như thế này:Có thể định nghĩa toán tử mới trong Groovy không?

def trade = 200 @ 10 

Điều này có thể đạt được không?

Cảm ơn

EDIT: Tôi muốn làm rõ hơn là tôi muốn xác định toán tử không thêm phương thức. Chúc mừng.

+3

Không, hiện tại điều này là không thể, bạn phải sử dụng toán tử hiện tại để xác định hoạt động của mình –

+0

+ câu hỏi hay :) –

+0

Dường như [Spock Boys] (http://code.google.com/p/ spock/wiki/Interactions # Return_values) đã quản lý để làm điều đó với toán tử '>>>' không được đề cập trong danh sách [Toán tử quá tải] (http://groovy.codehaus.org/Operator+Overloading) được cung cấp bởi [ Ông. Muschko] (http://stackoverflow.com/users/528428/benjamin-muschko). Ai đó có thể giải thích làm thế nào nó có thể được thực hiện hoặc cung cấp một NO definitve? Tôi sợ rằng tôi không thể chấp nhận câu trả lời hiện tại. Cảm ơn bạn đã mang theo tôi. –

Trả lời

2

Tôi không khá chắc chắn làm thế nào bạn có thể làm cho tác phẩm này với các dấu hiệu @ nhưng bạn chắc chắn có thể thêm các hoạt động như thế này mà tôi thực sự thấy ấn tượng hơn:

Number.metaClass.buyFor { Integer price -> 
    delegate * price 
} 

def result = 200.buyFor(10) 
println result 
+0

Cảm ơn bạn đã nhập. Thật không may điều này không thực sự trả lời câu hỏi của tôi. Tôi biết rằng tôi có thể thêm các phương thức thông qua "vá khỉ", nhưng tôi thực sự muốn xác định toán tử. –

+1

Có vẻ như ký hiệu '@' chưa được hỗ trợ là [toán tử quá tải] (http://groovy.codehaus.org/Operator+Overloading). Nếu bạn có thể giải quyết cho bất kỳ nhà khai thác có sẵn nào, bạn có thể thực hiện nó như đã nêu ở trên. –

0
Number.metaClass."@" {Integer x -> delegate * x} 

assert (2.'@' (2)) == 4 
+0

Cảm ơn bạn đã nhập cảnh. Bạn đang ở gần, nhưng không có xì gà. Như tôi đã đề cập đến Ben, tôi đang tìm kiếm câu trả lời cho câu hỏi liệu có thể xác định một OPERATOR mới không thêm phương thức hay không. –

6

Chúng tôi luôn luôn muốn khả năng để xác định một toán tử thông qua người dùng trong Groovy, nhưng cho đến nay chúng tôi chưa gặp phải các vấn đề đi kèm với điều đó. Vì vậy, trạng thái hiện tại là Groovy không hỗ trợ các toán tử tùy chỉnh, chỉ những toán tử đã được sử dụng.

+0

Đã 3 năm kể từ khi câu trả lời này được viết. Bất kỳ thay đổi về tình trạng này? – kinbiko

+1

Không ... và không có khả năng thay đổi trong năm tiếp theo mà không cần tài trợ – blackdrag

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