F#中如何使用匿名类型替代显式类型声明简化代码编写
解决方案
你的需求可以实现,目前有两种常用的精简写法可选:
方案1:直接内联构造对象(零额外配置,开箱可用)
F# 支持直接在参数位置调用类型构造函数,不需要提前声明变量,同时可以省略new关键字(若目标类型实现了IDisposable仅会触发可选编译器提示,不影响运行),可以直接写成:
do! Async.AwaitTask(transferTextBox.TypeAsync(transferAmount, ElementHandleTypeOptions(Delay=15000f) ))
这种写法完全符合语法规范,比原始写法少了一行变量声明,和你预期的写法已经非常接近。
方案2:扩展方法重载(高频调用场景更简洁)
如果你需要频繁传入自定义Delay参数,可以提前定义一次方法扩展,后续所有调用都可以进一步简化:
首先在对应命名空间下定义扩展:
// 命名空间根据你实际使用的类库调整,以下为Playwright类库的示例 open Microsoft.Playwright type ElementHandle with member this.TypeAsync(text: string, delay: float32) = this.TypeAsync(text, ElementHandleTypeOptions(Delay = delay))
定义完成后,调用时可以直接传入delay数值,写法更短:
do! Async.AwaitTask(transferTextBox.TypeAsync(transferAmount, 15000f))
补充说明
你尝试写的(Delay=15000f)不符合F#语法规范:它既不是合法的对象构造表达式,也不是匿名记录(F#匿名记录语法为{| Delay = 15000f |}),且默认情况下匿名记录无法隐式转换为ElementHandleTypeOptions类型,所以无法直接使用。
内容的提问来源于stack exchange,提问作者Martin Thompson
相关产品推荐
相关产品推荐

