2012-04-04 56 views
65

Tôi mới bắt gặp khái niệm cây biểu thức mà tôi đã nghe nhiều lần. Tôi chỉ muốn hiểu ý nghĩa của cây biểu cảm và mục đích của nó là gì.Cây biểu thức là gì, bạn sử dụng chúng như thế nào và tại sao bạn sử dụng chúng?

Tôi rất thích nó nếu ai đó cũng có thể hướng dẫn tôi đến các giải thích đơn giản và các mẫu sử dụng.

+1

thể trùng lặp của [Tại sao bạn sẽ sử dụng biểu > chứ không phải là Func ?] (Http://stackoverflow.com/questions/793571/why-would-you-use-expressionfunct- chứ không phải là không đúng) – nawfal

+0

Đã trả lời bằng một vài ví dụ ..http: //stackoverflow.com/questions/403088/practical-use-of-expression-trees/20470060#20470060 – Moumit

Trả lời

63

Cây biểu thức là cấu trúc dữ liệu chứa biểu thức, về cơ bản là mã. Vì vậy, nó là một cấu trúc cây đại diện cho một phép tính bạn có thể thực hiện trong mã. Những đoạn mã này sau đó có thể được thực hiện bằng cách "chạy" cây biểu thức trên một tập hợp dữ liệu.

Điều tuyệt vời về cây biểu thức là bạn có thể tạo chúng trong mã; tức là, bạn xây dựng mã thực thi (hoặc một chuỗi các bước) trong mã. Bạn cũng có thể sửa đổi mã trước khi thực thi nó bằng cách thay thế các biểu thức bằng các biểu thức khác.

Biểu thức sau đó là đại biểu chức năng, chẳng hạn như (int x => return x * x).

Xem thêm http://blogs.msdn.com/b/charlie/archive/2008/01/31/expression-tree-basics.aspx

+3

Điều này không thực sự đúng. Như đã chỉ ra trong bài báo được liên kết, các cây biểu thức chủ yếu được sử dụng để biểu diễn các phép tính sẽ được gửi qua dây để thực hiện ở nơi khác. Vì lý do đó, chúng không chứa mã; thay vì chúng thay vì mã. –

+1

Cây biểu thức có thể được sử dụng cho bất kỳ phép tính nào bạn muốn thực hiện, cục bộ hoặc từ xa. Bạn có thể dễ dàng viết một trình phân tích cú pháp để chuyển đổi một biểu thức đã nhập thành một cây biểu thức. Ngoài ra tôi không bao giờ nói rằng cây biểu hiện chứa mã. –

+1

nếu "cấu trúc cây với các đoạn mã trong đó" không có nghĩa là chúng "chứa mã" thì bạn nên chỉnh sửa câu trả lời của mình để làm rõ điều đó. Bạn nên làm rõ rằng các biểu thức không chứa bất kỳ mã IL nào, và dựa vào việc được dịch thêm vào một cái gì đó có thể thực thi được. –

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