相关疑难解决方法(0)

摆脱F#中的"厄运金字塔"

我有几个口头表达式,我已经打包成一个函数:

open FsVerbalExpressions
open FsVerbalExpressions.VerbalExpression
open System.Text.RegularExpressions
open System

let createOrVerbExFromList (verbExList: VerbEx list) = 
    let orVerbEx = 
        verbExList
        |> List.reduce (fun acc thing -> verbExOrVerbEx RegexOptions.IgnoreCase acc thing) //simpleVerbEx

    orVerbEx 

let k12VerbEx =     
    let kTo12 =  ["SCHOOL"; "DIST"; "SD"; "HS"; "BD OF ED"]
    kTo12
    |> List.map (fun word -> VerbEx(word))
    |> createOrVerbExFromList

let twoYearCollegeVerbEx = 
    VerbEx("2 Year College")

let universityVerbEx = 
    VerbEx("UNIV")

let privateSchoolVerbEx = 
    VerbEx("ACAD")

//Here there be dragons:
let newInst (x: string) =
    match (isMatch x k12VerbEx) …
Run Code Online (Sandbox Code Playgroud)

f#

9
推荐指数
1
解决办法
331
查看次数

在 F# 中,是否有更惯用的方法来实现这些顺序测试

我有一个返回的函数(我们称之为“doSomething”):

('a * 'b) option
Run Code Online (Sandbox Code Playgroud)

并希望实现这样的目标:

let testA = doSomething ....
if testA.IsSome then return testA.Value
let testB = doSomething ....
if testB.IsSome then return testB.Value
let testC = doSomething ....
if testC.IsSome then return testC.Value
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个计算表达式或等效的简单语法,它会在结果为 None 时继续执行,但保留第一个 Some 结果。

显然我想避免while if / elif / elif / ... / elif / else 厄运金字塔。

f#

3
推荐指数
1
解决办法
71
查看次数

标签 统计

f# ×2