- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
随着 Rust 越来越充实,我对它的兴趣开始激起。我喜欢它支持代数数据类型,尤其是那些匹配的事实,但是对其他功能习语有什么想法吗?
例如标准库中是否有标准过滤器/映射/归约函数的集合,更重要的是,您能否以语法上令人愉悦的方式链接/组合它们 [1]?
既然已经有了使用 ADT 的优雅方法,那么 monad 又如何,特别是为它们提供一些语法糖?
[1] Haskell 有 (.) 和 (>>>),C# 扩展方法和可选的 LINQ,D 有统一的函数调用语法。
1 Câu trả lời
Rust 没有 HKT,但它的迭代器Thực ra支持使用高阶函数 (HOF) 的函数式编码,例如 map
,filter
, fold
等,方便链接。
与函数式语言相比,细节有所不同 - 它们通常是垃圾收集器,而 Rust 程序以确定性方式处理内存管理,类似于 C++ RAII - 作为程序流程的一部分。
为了实现高效链接,各个 HOF 返回可组合的惰性表达式模板,您可以通过 .to_owned_vec()
hoặc .collect()
或其他。
在某些情况下,这不是必需的,返回的表达式模板本身就是一个迭代器,这可能就足够了。例如,您可以使用 vì
循环对其进行迭代,或将其作为参数传递给通用函数。
参见:
C++11(带有额外的库)和 Rust 中都可能有类似的模式。 Rust 的泛型不如 C++ 模板强大,但默认情况下的不变性、面向表达式的语法、多态 lambda 和双向类型推断使它感觉更接近函数式语言。
关于“扩展方法”和统一调用语法,Rust 允许以类似的“开放世界”方式组织代码。您可以将具有更多方法的 impl
添加到库或程序中的任何类型,或者通过在其他库中实现您自己的特征方法来扩展现有类型。
与 C++ 相比,这使得使用可链接方法调用样式更容易(即更少需要修改或派生类型)。
请记住,Haskell 的很多习语都与纯度有关(例如 IO monad、镜头……),而 Rust 是多范式的,而不是纯函数式的。您可以在程序级别拥有一个纯函数以获得引用透明性的好处,但它的实现通过可变局部变量得到了简化。
关于functional-programming - Rust 是否/将支持函数式编程习惯用法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18374612/
Gần đây tôi đang sử dụng RestSharp để sử dụng tài nguyên RESTful của mình. Và dự kiến trao đổi dữ liệu bằng JSON giữa máy chủ và máy khách. Dưới đây là mã C# của tôi. var client = new RestSharp.Rest
Tôi đang đọc một bài viết của Bartosz Milewski trong đó ông định nghĩa hàm sau: instance Applicative Chan trong đó pure x = Chan (repeat x)
'…' thực chất là cú pháp đơn giản của go. Cách sử dụng đầu tiên chủ yếu là khi hàm có nhiều tham số không xác định và có thể chấp nhận nhiều tham số không xác định. Công dụng thứ hai là có thể bẻ nhỏ các lát bánh mì và chuyền tay nhau. Ví dụ:
Lời nói đầu: Suy nghĩ về việc tính toán bản đồ face_track_id: Bắt đầu xác minh dữ liệu={"state":[1,1,2,2,1,2,2,2],"pop":[&quo
Bài viết này sử dụng một ví dụ để minh họa cách sử dụng hàm PHP end() để truy cập phần tử cuối cùng của một mảng. Chia sẻ với mọi người để cùng tham khảo nhé. Phân tích cụ thể như sau: Hàm end() được sử dụng trong PHP để lấy phần tử cuối cùng trong một mảng. Hàm end() yêu cầu một mảng làm đối số duy nhất.
Tôi đang sử dụng jdk1.8.0_92. Máy ảo của tôi trông như thế này. $java -version phiên bản java "1.8.0_92" Môi trường chạy Java(TM) SE
Tình hình của tôi là tôi cần chuyển hướng tất cả các yêu cầu khớp với http://mywebsite.com/portfolio/[anyname] đến http://mywebsite.com/portfolio.php? tên người dùng
Tôi đang cố gắng sử dụng gắn thẻ giọng nói trong NLTK và đã sử dụng lệnh sau: >>> text = nltk.word_tokenize("And now for something totally differente
#include typedef QList IntList; qRegisterMetaType("IntList"); lỗi C2909: 'qRegisterMetaType':
Từ đây tôi biết rằng BN_CTX là một cấu trúc chứa biến tạm thời BIGNUM. Khi nào các biến BIGNUM này nhập vào BN_POOL của BN_CTX? Nếu tôi có một bignum_ctx BN_CTX
Đang cố gắng tạo đối tượng cho ABPersonRef Ví dụ: tham chiếu ABpersonRef; Đã bao gồm các khung Addressbook và AddressBookUI Ngay cả khi tôi biên dịch, nó vẫn báo 'ABPersonRef' chưa được khai báo
Tôi không thể sử dụng GetAltTabInfo. Có lẽ là một sai lầm ngớ ngẩn, nhưng vấn đề ở đây là gì? HWND taskSwitcher = FindWindow(L"TaskSwitcherWnd", L"Task S
JSLint4Java là trình bao bọc Java cho JSLint. Tôi cần thứ gì đó như thế này để sử dụng trong các dự án GWT của mình, nhưng cách duy nhất để sử dụng JSLint4Java có vẻ là từ dòng lệnh hoặc thông qua tác vụ ANT. Có ai biết có không
Tôi có phương thức persistData() để lưu trữ một đối tượng thực thể. Tôi có một phương thức khác là findData() thực hiện hoạt động find() trên cùng một lớp thực thể để lấy giá trị khóa chính được lưu trữ. Khi tôi gọi @PostPersist trong lớp thực thể
Dưới đây là mã của tôi. Vui lòng kiểm tra. 1. bool isUnavailable = db.Deploys.Where(p => p.HostEnvironmentId == Guid.Parse(h
Câu hỏi này đã có câu trả lời: Tại sao Tham số kiểu chung không thể có giới hạn dưới trong Java? (6 câu trả lời) Đã đóng 9 năm trước. Tôi đang cố gắng hiểu tại sao
Tôi đang cố gắng sử dụng cảnh báo Y của trình biên dịch scala nhưng tôi không nghĩ mình làm đúng. Trong ví dụ sau, nums không được sử dụng, do đó tôi muốn -Ywarn-value-discard in ra cảnh báo. Có hai điều kiện if, một điều kiện lồng vào điều kiện kia
Người dùng được yêu cầu chọn một ID từ một tập hợp nhất định. Tôi kiểm tra xem ID có tồn tại trong bộ sưu tập của mình không, nếu không, tôi sẽ ném một IndexOutOfBoundsException và bắt nó sau. Tôi thực sự có thể sử dụng ngoại lệ này để đạt được điều này
Tôi đang cố gắng giảm kích thước tệp hình dạng được tạo từ dữ liệu đường dẫn OSM. Tôi đang sử dụng triển khai DouglasPeuckerSimplifier của VTS. Tôi muốn xây dựng geojson của bản đồ đường bộ cho một GTFS (Đặc điểm kỹ thuật nguồn cấp dữ liệu giao thông chung) cụ thể.
Tôi hiểu rồi? ! là loại trừ một mẫu nhất định, ví dụ a(?!b) có nghĩa là nó sẽ khớp với "a" nếu không có "b" sau "a". Câu hỏi của tôi là, giả sử tôi có một tập tin chứa nội dung sau: một con mèo là một con mèo, một con chó là một con chó
Tôi là một lập trình viên xuất sắc, rất giỏi!