- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
Haskell、Rust 等语言提供了一个 Maybe
hoặc Option
类型。即使在 Java 中,也有一个 Không bắt buộc
现在打字。
为简单起见,我将在剩下的问题中将此类型称为“选项类型”。 “Không bắt buộc类型”显然经常用于描述提供类型注释是可选的情况。
我很好奇以下问题:Option 类型在 TypeScript 这样的语言中有意义吗? Option 类型的优点在其他语言中非常有说服力,我发现自己在使用 TypeScript 编程时缺少这种类型。
基本上,类型系统会强制您显式解包任何可能在 Option 值内的值。是的,TypeScript 的严格空值检查也可以实现这一点,但是,使用 Option 类型为您提供了一种(在我看来)更好的方式来处理潜在的 Không có
通过提供 map(f: T -> U): Option
值和 mapOr(f: T -> U, or: U): Option
方法等
例如,我希望像下面的代码这样工作:
interface Foo {
member: Option
}
const opt: Option = // ... some initialization
const memberLength: number = opt
.map(x => x.member) // None if x is None, else Some(...)
.map(x => x.length) // None if x.member is None, else Some(x.length)
.unwrapOrElse(() => 0);
这当然是一个非常简单的示例,其中使用 Option 类型有点过度设计。不过,它应该给出一个基本概念。
我目前看不出这是一个坏主意的原因,但据我所知,似乎没有人实现过它。这会对性能产生严重影响吗?还是有任何其他我看不到的问题使它不可行?
Để ý:我(主要)不是在询问如何实现它(尽管这也是一个有趣的话题——但我对此有想法)。我主要关心的是找出为什么似乎还没有人使用这样的东西。
câu trả lời hay nhất
编辑 2019
检查 fp-ts
原始答案
我错过了来自 Scala(和一些 Haskell)的它,所以我为它(和其他几个)制作了自己的库:MM (麻省理工学院许可证)
随意破解、 fork 等……;它是麻省理工学院许可的
关于typescript - Option 或 Optional 类型 (Option
Tôi đang cố gắng viết một thư viện khá đa hình. Tôi rơi vào tình huống dễ thể hiện điều đó nhưng lại khó nói về nó hơn. Nó trông hơi giống thế này: {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE
Có ai có thể giải thích cách biểu thức này hoạt động không? type = type || 'any'; Điều này có nghĩa là sử dụng 'any' nếu loại không được xác định? Câu trả lời hay nhất Nếu loại là "falsy" (tức là sai hoặc không xác định
Tôi có một giao diện, trong IAnimal.fs, không gian tên Kingdom loại IAnimal = thành viên trừu tượng Eat : Food -> unit và một thành công khác
Câu hỏi này đã có câu trả lời ở đây: đã đóng cửa 10 năm trước. Có thể trùng lặp: Sự khác biệt giữa giá trị (loại) và loại (va)
Trong C#, có sự khác biệt giữa mặc định (Nullable) không? (hoặc mặc định(dài?) ) và mặc định(dài) ? Long chỉ là một ví dụ, nó có thể là bất kỳ loại cấu trúc nào khác. hầu hết
Giả sử tôi có một lớp trường hợp: case class Foo(num: Int, str: String, bool: Boolean) Bây giờ tôi cũng có một trình bao bọc đơn giản: seal trait Wrapper[
Câu hỏi này đã có câu trả lời ở đây: Tạo loại đại biểu C# với tham số ref khi chạy (1 câu trả lời) Đã đóng 2 năm trước. Để tạo một đại biểu một cách nhanh chóng (dele
Tôi đang cố gắng lấy dct của một hình ảnh. Lúc đầu, tôi gặp lỗi Chức năng/tính năng không được triển khai (DCT kích thước lẻ không được triển khai
Tôi đang cố gắng sử dụng AFPropertyListRequestOperation của AFNetworking, nhưng khi tôi cố tải xuống, tôi gặp lỗi Expected content type {("application/x-plist")},
Tôi đang gặp lỗi bên dưới. Tôi biết mã này có nghĩa là gì, nhưng tôi không biết giao diện sẽ trông như thế nào: Phần tử ngầm có loại 'bất kỳ' vì biểu thức chỉ mục là
Tôi cố gắng mở rộng SignalType từ ReactiveCocoa sang ErrorType tùy chỉnh, mã như sau enum MyError: ErrorType { // .. case }
Tôi không thể tìm thấy câu trả lời trong bất kỳ câu hỏi nào khác. Giả sử tôi có một siêu lớp trừu tượng Tóm tắt0, có hai lớp con Concrete1 và Concrete1. Tôi muốn có thể định nghĩa các lớp trong Tóm tắt0
Tôi muốn biết tại sao chỉ mục này không được sử dụng trong loại RANGE mà trong INDEX: Index: CREATE INDEX myindex ON order(order_date);
Tôi đang sử dụng RxJava và bây giờ tôi cố gắng đăng ký một thiết bị có thể quan sát được bằng cách cung cấp lambda: observableProvider.stringForKey(CURRENT_DELETED_ID) .sub
Tôi đã thử hầu hết mọi giải pháp cho vấn đề, bao gồm cả. Còn nhiều cách khác để sử dụng app.use(express.static('public')) cho loại được cung cấp, nhưng dường như tôi không thể tìm ra giải pháp cho việc này. index.js: imp
Bộ chọn CSS nào sau đây nhanh hơn? input[type="submit"] { /* styles */ } hoặc [type="submit"] { /* styles */ } đều ổn
Tôi không biết có gì sai với thiết lập này, tôi nhận được tất cả các chú thích (@Controller, @Repository, @Service) trong IDEA và nó hiển thị Bean ở bên trái của số dòng rồi chuyển đến Bean đó. Đây là lỗi: 14-
Tôi đã làm theo lời khuyên khi đăng ký hàm java làm hàm gọi lại trong hàm C và tôi có thể sử dụng các loại "đơn giản" như số nguyên và chuỗi cho hàm gọi lại, ví dụ: jstring j
Có một số lớp java, được tải vào cơ sở dữ liệu Oracle (phiên bản 11g) và các trình bao bọc hàm pl/sql: tạo hoặc thay thế hàm getDataFromJava( in_uLis
Tôi đã lấy mã từ lệnh gọi lại hoạt ảnh css của David Walsh và sửa đổi nó thành TypeScript. Tuy nhiên, tôi gặp lỗi và không biết tại sao: giao diện IBrowserPrefix { [
Tôi là một lập trình viên xuất sắc, rất giỏi!