2011-12-13 22 views
8

Đây là lỗi thực sự kỳ lạ mà gần đây tôi đã gặp trong CF9. Bất cứ ai cũng có một đầu mối tại sao nó xảy ra và nếu tôi đang làm điều gì đó sai, hoặc có một hotfix có sẵn. Nhìn vào đoạn mã sau. Chúng tôi lấy một chuỗi, thêm một A, thêm một B, và sau đó cố gắng để thêm một C ... nhưng kết quả chúng tôi nhận được là "ababc". Kết quả mong đợi là "abc". Lỗi này chỉ xảy ra nếu bạn thực hiện một đối số được đặt tên VÀ một cấu trúc ngầm trong đối số vượt qua VÀ toán tử &= trong lệnh gọi hàm. Nếu bất kỳ trường hợp nào trong số 3 trường hợp này không có, lỗi đó không xảy ra. Bất kỳ ý tưởng tại sao?Lỗi kỳ lạ với các đối số được đặt tên và tạo cấu trúc ngầm trong hàm gọi

<cffunction name="test"> 
    <cfargument name="widget"> 

    <cfset var locals = StructNew()> 

    <cfreturn arguments.widget.value> 
</cffunction> 

<cfset return = ""> 
<cfset return &= "a"> 
<cfset return &= "b"> 
<cfset return &= test(widget = { value = "c" })> 
<cfoutput>#return#</cfoutput> 
+1

Chà, điều đó rất lạ. Hãy báo cáo lỗi với Adobe. –

+1

Đã thực sự http://cfbugs.adobe.com/cfbugreport/flexbugui/cfbugtracker/main.html#bugId=87217. xem nếu tôi t biến bất cứ điều gì lên. – Nucleon

+0

trả về "abc" trong sổ ghi chép của tôi, XP SP2, Nhà phát triển Máy chủ ColdFusion 9.0.0,251028 – tsurahman

Trả lời

2

Vâng: bạn đã trả lời câu hỏi của riêng bạn ở đây: nó xảy ra vì đó là lỗi. Lỗi xảy ra. Thật tuyệt khi bạn dành thời gian để tư vấn cho Adobe về nó.

Đối quanh công việc, hai biến thể này hoạt động tốt:

<cfset return = ""> 
<cfset return &= "a"> 
<cfset return &= "b"> 
<cfset st = { value = "c" }><!--- refactor where the struct is created ---> 
<cfset return &= test(widget = st)> 
<cfoutput>#return#</cfoutput> 

Hoặc:

<cfset return = ""> 
<cfset return &= "a"> 
<cfset return &= "b"> 
<cfset temp = test(widget = { value = "c" })><!--- refactor where the function is called ---> 
<cfset return &= temp> 
<cfoutput>#return#</cfoutput> 

Bạn chỉ sẽ phải làm một cái gì đó như thế cho đến khi Adobe được xung quanh để sửa chữa nó: - (

+1

hoặc đơn giản: '' giữ nó một hàng. – Henry

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