我发现自己经常实现相同的(x, y)
模式:
let rectangleSizes = seq {
for w = 1 to width do
for h = 1 to height do
yield (w, h)
}
偶然地不会有一个简单的单线吗?当然,我可以只用一行编写相同的函数,但是我觉得它的可读性会受到很大影响:
let rectangleSizes = seq { for w = 1 to width do for h = 1 to height do yield (w, h) }
如果我一直都进行初始化,那么我将定义自己的运算符:
let (..) (x0,y0) (xn,yn) =
seq {
for x = x0 to xn do
for y = y0 to yn do
yield (x, y)}
let rectangleSizes = {(1,1) .. (5,7)}
但这掩盖了原始(..)
运算符,但是您可以使用其他运算符名称或函数。还有一个技巧可以避免遮盖原始的运算符定义。
或者,如果您使用实现诸如F#+之类的应用函子的库,则可以在一行中将其定义为:
let rectangleSizes = (fun x y -> (x, y)) <!> {1..width} <*> {1..height}
注意:该函数fun x y -> (x, y)
通常称为tuple2
#r @"FsControl.Core.dll"
#r @"FSharpPlus.dll"
open FSharpPlus
let tuple2 a b = (a,b)
let width, height = 5,7
let rectangleSizes = tuple2 <!> {1..width} <*> {1..height}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句