2010-07-16 24 views
8

Trong python, tôi có thể sử dụng eval() để thực thi mã người dùng đã nhập trong chương trình của tôi. Có điều gì tương tự tôi có thể làm trong Groovy không? Tôi muốn có một hộp văn bản giao diện người dùng SWING nơi người dùng nhập một đoạn mã mà tôi muốn thực thi?Tương đương eval() trong Groovy

Cảm ơn, Hari

Trả lời

2

Hãy thử điều này (nhưng như thường lệ với eval trong bất kỳ ngôn ngữ kịch bản cẩn thận về mã exeution độc hại):

evaluate("print new Date()") 
+0

Tôi cố gắng để chạy một đoạn mã nhỏ trong ngữ pháp tùy chỉnh của tôi - chắc chắn sẽ kiểm tra mã độc . – Hari

9

Có nhiều cách để chạy Groovy (từ cả bên trong Java và Groovy):

http://groovy.codehaus.org/Embedding+Groovy

phương pháp nhanh nhất tuy nhiên (cho các kịch bản đơn giản), Có lẽ là để sử dụng lớp Eval:

http://groovy.codehaus.org/api/groovy/util/Eval.html

nào sẽ cho phép bạn làm điều gì đó như:

Eval.me('2 + 2') 

Xem trang này từ hơn ví dụ:

http://mrhaki.blogspot.com/2009/11/groovy-goodness-simple-evaluation-of.html

+0

Cảm ơn bạn sẽ thử điều đó! – Hari

4

Có, có thể đánh giá động mã trong Groovy bằng cách sử dụng Eval.x, Eval.xy, Eval.xyz hoặc Eval.me. Xem the API doc để biết thêm chi tiết về các phương pháp này.

Ví dụ, bạn sử dụng Eval.me như thế này:

def a = "hello" 
def b = "world" 
Eval.me(""" println "$a $b" """) 
--> hello world 

Ngoài ra, xem this blog post for some eval examples

+2

Bạn có nghĩa là 'Eval.xy (a, b, 'println" $ x $ y "')' chắc chắn? ;-) –

+0

Rất vui, cảm ơn. Đã thay đổi từ Eval.x thành Eval.me. Về việc sử dụng Eval.xy vs Eval.x - đó là vấn đề ưu tiên. Trong trường hợp này, bạn có thể sử dụng một trong hai. Ngoài ra, bạn có thể sử dụng 'hoặc' "". –

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