js的解构赋值有类似于haskell的as模式吗

发布于 2022-09-11 23:11:00 字数 904 浏览 22 评论 0

在haskell中可以使用as模式来实现对原参数的声明
例如 :

-- haskell
test :: String -> String                                     
test all@(x:xs) = "arg is :" ++ all ++ " head is :" ++ [x] ++ " tail is :" ++ xs
-- test "123" : "arg is :123 head is :1 tail is :23"

但在js中我并没有找到相关的内容可以获取到这个'all'。只能通过这种方法来同时声明原参数以及'head'和'tail'

//  每次使用这个all都要重新创建一个数组进行计算一次,性能略差。
const test1 = ([head, ...tail]) => `arg is : ${[head, ...tail]} head is : ${head} tail is : ${tail}`

//  需要多写一个声明语句,并且无法在一行内完成函数体,不整洁
const test2 = (all) => {
    let [head, ...tail] = all
    return `arg is : ${all} head is : ${head} tail is : ${tail}`
}

// 各种意义上来说都不太行
function test3([head, ...tail]) {
    return `arg is : ${arguments[0]} head is : ${head} tail is : ${tail}`
}

目前我只能想到这几种方法去模拟这个as模式。请问各位js有没有什么类似与可选链那种实验性的方法可以实现haskell中的as模式。咱们前端都是十分时髦并且喜欢追求新事物的,所以说一定有的吧,这个!!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

极度宠爱 2022-09-18 23:11:00
function a(a,b,c){
    console.log(a,b,c);
}
function b(){
    let Args = Array.prototype.splice.call(arguments,1);
    a.apply(null,Args);
}
b(1,2,3,4);//2 3 4
b(1,2,3);//2 3 undefined

这是你要的吗?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文