2013-08-23 25 views
5

phép nói rằng bạn có đoạn mã sau vào Xtend:xTend: Làm thế nào để dừng một biến in từ đầu ra?

class StackOverflowGenerator { 
    def generate()''' 
    «var counter = 0» 
    «FOR i : 0 ..<10» 
    Line Numnber: «i» 
    «counter = counter + 1» 
    «ENDFOR» 
''' 

} 

Điều này sẽ tạo ra trong định dạng:

Line Numnber: 0 
    1 
    Line Numnber: 1 
    2 
    Line Numnber: 2 
    3 
    Line Numnber: 3 
    ... 

Làm thế nào để tôi nhận được Xtend không in phù hợp với chỉ quầy và chỉ in dòng số dòng như vậy mà đầu ra trông giống như:

Line Numnber: 0 
Line Numnber: 1 
Line Numnber: 2 
Line Numnber: 3 
... 
+1

Mục đích của biến 'truy cập' là gì? Tại sao không chỉ sử dụng tôi? – ZhekaKozlov

Trả lời

3

Trong ví dụ của bạn, không sử dụng cho counter. Vì vậy, rất khó để đoán những gì usecase thực sự của bạn là. Trong hầu hết các trường hợp, một số phép tính dựa trên i là đủ, loại bỏ hoàn toàn counter. Câu trả lời của Orionll chỉ theo hướng đó.

Nếu tuy nhiên counter là thứ không thể tính từ i nhưng là trạng thái tích lũy, thì điều đơn giản nhất là trích xuất trạng thái đó thành lớp tùy chỉnh và sửa đổi trạng thái này bằng phương pháp void. Trong ví dụ này, phương thức void setCounter(int) được tạo ra được sử dụng.

class Example { 
    def static void main(String[] args) { 
     println(generate) 
    } 

    def static generate() ''' 
     «var state = new State(0)» 
     «FOR i : 0 ..< 10» 
      Line Numnber: «i» 
      «state.setCounter(state.counter + 1)» 
     «ENDFOR» 
    ''' 

} 

class State { 
    @Property 
    var int counter 

    new(int counter){ 
     this.counter = counter 
    } 
} 
1
«var counter = 0» 
«FOR i : 0 ..<10» 
Line Number: «counter = i» 
«ENDFOR» 
+0

Cách tiếp cận đẹp và sạch sẽ. – Vivit

7

Trong Xtend, everything is an expression, vì vậy «counter = counter + 1» để đánh giá kết quả của nhiệm vụ, đó là lý do tại sao nó sẽ là một phần của chuỗi. Vì vậy, nếu bạn thực sự muốn thực hiện một hiệu ứng phụ trong vòng lặp biểu thức mẫu cho vòng lặp (được khuyến khích mạnh mẽ), hãy thực hiện nó trong một biểu thức khối và trả về chuỗi rỗng hoặc rỗng: «{ counter = counter + 1; "" }». Tuy nhiên, đây không phải là quá thanh lịch, vì vậy bạn có thể muốn giải quyết vấn đề của bạn theo một cách khác, như các câu trả lời khác đề nghị.

+0

Dù sao đi nữa, nếu tôi phải suy nghĩ về việc ngăn chặn một hành vi mà từ một quan điểm kỹ thuật hơn có thể được coi là một tác dụng phụ (thậm chí khó khăn tác dụng phụ là do thiết kế trong trường hợp này). – JensG

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