2012-11-24 44 views

Trả lời

52

Unit là loại có chính xác một giá trị - xem Unit type. Mặt khác, Nothingkhông thể có giá trị - xem Bottom type.

Hàm không trả lại bất kỳ thứ gì phải có kiểu trả về Unit. Nếu đó là Nothing thì hàm không thể trả lại kết quả. Cách duy nhất để thoát khỏi hàm sẽ là một ngoại lệ.


Nothing được sử dụng theo cách khác. Nó được đặc trưng bởi hai thuộc tính:

  1. Nothing là loại phụ của mọi loại khác (bao gồm Null).
  2. Không tồn tại trường hợp nào thuộc loại này.

Khi nào điều này hữu ích? Cân nhắc None:

object None extends Option[Nothing] 

Option là hiệp biến trong tham số kiểu của nó và Nothing là một subtype của tất cả mọi thứ, Option[Nothing] là một subtype của Option[A] cho tất cả các loại A. Vì vậy, chúng tôi có thể tạo một đối tượng None là một loại phụ của Option[A] cho mỗi A. Điều này là hợp lý, vì Nothing không thể được khởi tạo nên Option[Nothing] sẽ luôn không có giá trị. Tương tự như vậy

object Nil extends List[Nothing] 

Unit tương ứng với logic đúng và Nothing tương ứng với logic sai dưới sự Curry-Howard isomorphism, nơi chúng tôi xem các loại như mệnh đề và có chức năng như chứng minh,.

13

Unit có nghĩa là (a) chức năng có các tác dụng phụ như đầu vào và đầu ra, (b) các tác dụng phụ này là mục tiêu chính của hàm. Tất nhiên, chức năng có thể có tác dụng phụ ngay cả khi nó là loại khác nhau từ Unit.

Nothing là một loại đặc biệt tại Scala, bởi vì (a) nó không có giá trị (Đơn vị có exectly một giá trị - ()), vì vậy bạn không thể trở về giá trị của loại Nothing và (b) nó là một subtype của mỗi loại khác . Điều đó có nghĩa, nếu một cái gì đó có loại Nothing, nó có thể được sử dụng ở mọi nơi mà loại khác là bắt buộc, nhưng nó sẽ không tạo ra bất kỳ kết quả nào. Điều này được sử dụng để xử lý ngoại lệ - throw biểu thức có loại Nothing, do đó, nó có thể được sử dụng về cơ bản ở mọi nơi trong một chương trình.

Đơn giản, Nothing có nghĩa là đã xảy ra lỗi và không có gì được trả về, trong khi Unit có nghĩa là đã có tác dụng phụ.

Programming in Scala có giải thích tốt về điều đó.

6

Để thêm một khía cạnh vào trả lời của Petr: Nothing đóng một vai trò quan trọng trong phân cấp loại. Đây là loại dưới cùng. Điều đó có nghĩa rằng nó là một loại phụ của mọi loại khác, giống như đối diện của Any, đó là một kiểu siêu của tất cả mọi thứ. Bạn có thể tìm thấy một lời giải thích tốt đẹp here.

+1

@ downvoters: Khi tôi viết câu trả lời này, câu trả lời của Petr không đề cập đến khía cạnh kiểu dưới cùng. Anh ấy chỉ thêm nó sau. – bluenote10

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