2009-01-16 25 views

Trả lời

41

Some không phải là từ khóa. Tuy nhiên, có một loại option, là một công đoàn phân biệt đối xử chứa hai điều:

  1. Some giữ giá trị của một số loại.
  2. None thể hiện thiếu giá trị.

Nó định nghĩa là:

type 'a option = 
    | None 
    | Some of 'a 

Nó hoạt động giống như một loại nullable, nơi bạn muốn có một đối tượng mà có thể giữ một giá trị của một số loại hoặc không có giá trị gì cả.

let stringRepresentationOfSomeObject (x : 'a option) = 
    match x with 
    | None -> "NONE!" 
    | Some(t) -> t.ToString() 
7

Có thể xem Discriminated Unions in F# để biết thêm thông tin về DU nói chung và loại tùy chọn (Một số, Không) nói riêng. Như một câu trả lời trước đó nói, Một số chỉ là một trường hợp công đoàn của tùy chọn < 'a> loại, mà là một ví dụ đặc biệt phổ biến/hữu ích của một loại dữ liệu đại số.

1

Some được sử dụng để chỉ định tùy chọn tùy chọn hoặc nói cách khác là loại có thể có hoặc không tồn tại.

F # là khác với hầu hết ngôn ngữ trong đó kiểm soát dòng chảy chủ yếu thực hiện thông qua Pattern Matching như trái ngược với truyền thống if/else logic.

Trong truyền thống if/else logic, bạn có thể thấy một cái gì đó như thế này:

If (isNull(x)) { do ...
} else { //x exists do ...
}

Với mô hình phù hợp với logic, phù hợp với chúng ta cần một cách tương tự để thực thi mã nhất định nếu một giá trị là null, hoặc trong F # cú pháp, Không

như vậy chúng ta sẽ có cùng một mã như

match x with | None -> do ... | Some x -> do ...

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