2015-08-10 11 views

Trả lời

14

Câu trả lời ngắn gọn: không có lý do gì để sử dụng ? trong trường hợp của bạn.

Long trả lời: ? có một ý nghĩa khác nhau - nó implies nullability, nghĩa là nó kết thúc tốt đẹp các loại cơ bản (Int, Float, Bool) vào Null<T> để chắc chắn rằng họ là nullable thậm chí vào các mục tiêu tĩnh (vào các mục tiêu năng động như JavaScript và Neko, đây là vô giá trị một trong hai cách). Nếu bạn có một đối số kiểu Int, hai sau là tương đương:

function f(i:Null<Int> = null) 
function f(?i:Int) 

Bây giờ, nếu bạn bổ sung thêm một default value để loại tùy chọn của bạn, giá trị đó sẽ được sử dụng ngay cả khi bạn vượt qua null:

class Test { 
    static function main() { 
     f(); // 12 
     f(null); // 12 
    } 

    static function f(?i:Int = 12) { 
     trace(i); 
    } 
} 
0

Chúng là hai thứ khác nhau. A? Có nghĩa là tham số tùy chọn. Vì vậy, nếu có thể được loại trừ hoàn toàn khỏi cuộc gọi hàm và sẽ không có thay thế nào xảy ra.

(x: Float = 12) là thông số mặc định. Có nghĩa là nếu nó bị loại trừ khỏi hàm gọi giá trị 12 sẽ được sử dụng.

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