2011-07-11 33 views
7

Tôi đã xem ví dụ mã này trong bản ghi và muốn biết cú pháp đại tràng đã làm gì. Tôi đã tìm kiếm các tài liệu, nhưng tôi đã không thể tìm thấy bất kỳ thông tin về nó:Sử dụng dấu hai chấm có các đối số được đặt tên trong ColdFusion

weather.subscribe(observer: application.observers.currentConditions);

tôi biết chúng tôi có thể sử dụng thư ruột kết ở CF9 cho các nhà khai thác ternary:

result = (condition) ? true : false;

Nhưng trong trường hợp này có vẻ như nó đang được sử dụng để cung cấp các đối số được đặt tên; vậy nó làm gì ở đó?

Trả lời

10

<cfset result = obj.func(arg:value,thing:42) /> Tôi nhìn này và đi nháy, nhấp nháy ... Điều đó không thể là đúng! Bạn không thể sử dụng dấu hai chấm cho các đối số được đặt tên ! Er, bạn có thể? Vâng, rõ ràng bạn có thể.

http://corfield.org/blog/post.cfm/Learn_something_new_every_day_named_arguments

+0

Ai không thể tin được, bạn hoặc Sean? ;) – Leigh

+0

Yipes, đó thực sự là kiểu "quote" trên SO? Gần như không thể phân biệt được với văn bản thông thường:/Không có thắc mắc tôi chớp mắt hai lần ... – Leigh

+0

@Ligh, tôi nghĩ màn hình LCD của bạn có một số vấn đề về hiệu chuẩn màu sắc: D - trên một trong những máy tính xách tay của tôi. – Mohamad

-1

Trông giống như lỗi đánh máy với tôi. Trong ColdFusion bạn sẽ sử dụng dấu bằng (=) không phải dấu hai chấm để sử dụng các đối số được đặt tên.

dụ của bạn sẽ trở thành:

weather.subscribe(observer = application.observers.currentConditions); 
+0

@Sean Coyne, tôi không nghĩ đó là lỗi đánh máy. Có một số ví dụ sử dụng cùng một định dạng và một người nào đó đã nhận xét về nó là một điều tuyệt vời (các dấu hai chấm đó hoạt động). Điều tôi đang cố hiểu là cú pháp có nghĩa là gì. Nó chỉ là một cách khác để nói 'arg = myValue'? – Mohamad

+1

Tôi đã nhìn thấy công việc đại tràng cho tên arg trong CF, nhưng có, = là những gì mọi người sử dụng. – Henry

+0

@Henry, vì vậy nó chỉ là một cách khác để nói 'doSomething (myArg = myValue)'? – Mohamad

0

Có, bạn được phép sử dụng cả hai. Tôi nghĩ đó là vấn đề ưu tiên. Bạn thậm chí có thể trộn.

Hãy thử điều này và xem, chế nhạo lên một số chức năng kiểm tra:

<cffunction name="testFunction" returntype="void" hint="I just spit out the arguments I get"> 
    <cfdump var="#arguments#" label="arguments"> 
</cffunction> 

<cfset testFunction(arg1:"hello",arg2:"world") /> 
<cfset testFunction(arg1="hello",arg2="world") /> 
<cfset testFunction(arg1:"I can mix",arg2="my named argument syntax") /> 

Cá nhân, tôi thích = cho các đối số được đặt tên. Bạn cũng có thể nhận thấy rằng nếu bạn sử dụng IntelliJ IDEA để phát triển ColdFusion của bạn mà họ không nhận ra cú pháp đại tràng, do đó, để phân tích cú pháp tốt hơn bạn sẽ muốn sử dụng cú pháp =. Tôi không thể nói cho các IDE khác

+0

CFEclipse không có lỗi tương tự như IntelliJ IDEA, và tôi nghi ngờ CFBuilder làm một trong hai. –

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