草庐IT

swift - 在闭包中解构元组的元组

coder 2023-09-04 原文

我可以轻松地解构元组的元组:

let tt = (2, (3, 4))

let (a, (b, c)) = tt
b // => 3

我想在声明闭包时做同样的事情,例如我认为我可以写:

[tt].map { (a, (b, c)) in
    // Use b
}

Xcode 提示“未命名的参数必须用空名称写入”。

我让它“工作”的唯一方法是:

[tt].map { (a, tuple: (b: Int, c: Int)) in
    // Use tuple.b
}

这有两个我想避免的缺点:

  • 我需要使用 tuple.b 而不是 b
  • 我需要指定bc的类型

顺便说一句,我的用例是我想用索引做一个reduce,所以我正在尝试使用array.enumerate().reduce

最佳答案

通过额外的赋值行,您可以将数组中的值赋给 (a, (b, c)) 以解构元组:

let tt1 = (2, (3, 4))
let tt2 = (5, (6, 7))

[tt1, tt2].map { tt in
    let (a, (b, c)) = tt
    print(b)
}

输出:

3
6

或者:

[tt1, tt2].map {
    let (a, (b, c)) = $0
    print(b)
}

关于swift - 在闭包中解构元组的元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37358171/

有关swift - 在闭包中解构元组的元组的更多相关文章

  1. ruby - Ruby 中的闭包和 for 循环 - 2

    我是Ruby的新手,有些闭包逻辑让我感到困惑。考虑这段代码:array=[]foriin(1..5)array[5,5,5,5,5]这对我来说很有意义,因为i被绑定(bind)在循环之外,所以每次循环都会捕获相同的变量。使用每个block可以解决这个问题对我来说也很有意义:array=[](1..5).each{|i|array[1,2,3,4,5]...因为现在每次通过时都单独声明i。但现在我迷路了:为什么我不能通过引入一个中间变量来修复它?array=[]foriin1..5j=iarray[5,5,5,5,5]因为j每次循环都是新的,我认为每次循环都会捕获不同的变量。例如,这绝对

  2. ruby - 如何 `break` 闭包中的外部循环(Proc,lambda)? - 2

    loop{break}可以正常工作,但是block=Proc.new{break}#or#block=lambda{break}loop(&block)#=>LocalJumpError:breakfromproc-closure是否可以在block变量中中断?更新:举例说明:defodd_loopi=1loopdoyieldii+=2endenddefeven_loopi=2loopdoyieldii+=2endend#Thisworkodd_loopdo|i|putsibreakifi>10end#Thisdoesn'tworkbreak_greater_10=Proc.newdo

  3. ruby - 我如何在 Ruby 中解构一个范围? - 2

    是否可以在ruby​​中使用解构来提取范围的结束和开始?modulePriceHelperdefprice_range_human(range)"$%sto$%s"%[range.begin,range.end].map(:number_to_currency)endend我知道我可以使用数组强制作为一个非常糟糕的hack:first,*center,last=*rng"$%sto$%s"%[first,last].map(:number_to_currency)但是有没有一种语法方法可以在不实际手动创建数组的情况下获取begin和end?min,max=(1..10)会很棒。

  4. sql - Ruby ActiveRecord 和 sql 元组支持 - 2

    假设底层数据库支持,ActiveRecord是否支持where子句中的元组?生成的where子句类似于:where(name,address)in(('John','123MainSt'))我试过:Person.where({[:name,:address]=>['John','123MainSt']})但它没有用。 最佳答案 tupleArray=[['John','123MainSt'],['Jane','124MainSt']]Person.where("(name,address)IN(#{(['(?)']*tupleArr

  5. ruby - 在 Ruby 中定义一个闭包方法 - 2

    我正在用ruby​​重新定义对象中的方法,我需要新方法作为闭包。例如:defmess_it_up(o)x="blahblah"defo.to_sputsx#Wrong!xdoesn'texistshere,amethodisnotaclosureendend现在如果我定义一个Proc,它就是一个闭包:defmess_it_up(o)x="blahblah"xp=Proc.new{||putsx#Thisworksend#buthowdoIsetittoo.to_s.defo.to_sxp.call#sameproblemasbeforeendend有什么想法吗?谢谢。

  6. ruby - Ruby 中的闭包 - 2

    我在闭包方面遇到了一些麻烦,我想知道是什么规范的make-adder过程的等效代码将在ruby。在计划中它会是这样的:(define(make-addern)(lambda(x)(+xn)) 最佳答案 其实很接近...defmake_addrnlambda{|x|x+n}endt=make_addr100t.call1101在1.9中你可以使用...defmake_addrn->(x){x+n}end 关于ruby-Ruby中的闭包,我们在StackOverflow上找到一个类似的问题:

  7. ruby - 在 Ruby 中使用元组? - 2

    有人在Ruby中使用元组吗?如果是这样,如何实现元组?Ruby散列很好用,几乎也可以工作,但我真的很想看到类似Python中的Tuple类的东西,您可以在其中使用.符号来查找您要查找的值。我想要这个,以便我可以创建D的实现,类似于Dee用于Python。 最佳答案 OpenStruct?简要示例:require'ostruct'person=OpenStruct.newperson.name="JohnSmith"person.age=70person.pension=300putsperson.name#->"JohnSmith"

  8. javascript - 解构时引用对象 - 2

    我在玩解构:functioncreate(){letobj={a:1,b:2}obj.self=objreturnobj}const{a,self}=create()有没有办法在不添加这样的属性的情况下获取self对象?functioncreate(){letobj={a:1,b:2}//removesobj.self=objreturnobj}const{a,this}=create()尽可能用一行代码!预先感谢您的帮助。 最佳答案 您可以将create的返回值包装在一个临时的外部对象中,然后从外部对象通过属性名访问原始对象。这仍

  9. javascript - "return () => local;"在这个闭包中做了什么? - 2

    我正在通过阅读“EloquentJavascript”学习javascript,但对第3章(函数)中的“闭包”部分感到困惑。在前面的部分中,我了解了箭头函数,以及如何将它们用作匿名函数。我最初的想法是,这是一个匿名函数示例,我只是还不熟悉。特别是,我对“()=>local”对返回/返回的作用感到困惑。functionwrapValue(n){letlocal=n;return()=>local;}letwrap1=wrapValue(1);letwrap2=wrapValue(2);console.log(wrap1());//→1console.log(wrap2());//→2这是

  10. javascript - 数组中的嵌套对象 - 对象解构 es6 - 2

    所以我知道您可以像这样进行对象析构:const{item}=data;还有像这样的数组解构:const[item]=data;您也可以在函数参数中执行此操作,例如:constx=({item})=>item;而且我看到了很多关于它的问题和答案。但是我还没有看到数组中嵌套对象的示例和很好的解释。consttest=[{count:1}];const[{count}]=test;我通常会这样做:constx=test[0];const{count}=x;直到今天在codepen中进行测试时,我才发现您可以在同一作业中同时析构它们。谁能解释一下我在执行[{count}]时发生了什么?因为我正

随机推荐