我可以轻松地解构元组的元组:
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 而不是 bb和c的类型顺便说一句,我的用例是我想用索引做一个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/
我是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每次循环都是新的,我认为每次循环都会捕获不同的变量。例如,这绝对
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
是否可以在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)会很棒。
假设底层数据库支持,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
我正在用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有什么想法吗?谢谢。
我在闭包方面遇到了一些麻烦,我想知道是什么规范的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上找到一个类似的问题:
有人在Ruby中使用元组吗?如果是这样,如何实现元组?Ruby散列很好用,几乎也可以工作,但我真的很想看到类似Python中的Tuple类的东西,您可以在其中使用.符号来查找您要查找的值。我想要这个,以便我可以创建D的实现,类似于Dee用于Python。 最佳答案 OpenStruct?简要示例:require'ostruct'person=OpenStruct.newperson.name="JohnSmith"person.age=70person.pension=300putsperson.name#->"JohnSmith"
我在玩解构: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的返回值包装在一个临时的外部对象中,然后从外部对象通过属性名访问原始对象。这仍
我正在通过阅读“EloquentJavascript”学习javascript,但对第3章(函数)中的“闭包”部分感到困惑。在前面的部分中,我了解了箭头函数,以及如何将它们用作匿名函数。我最初的想法是,这是一个匿名函数示例,我只是还不熟悉。特别是,我对“()=>local”对返回/返回的作用感到困惑。functionwrapValue(n){letlocal=n;return()=>local;}letwrap1=wrapValue(1);letwrap2=wrapValue(2);console.log(wrap1());//→1console.log(wrap2());//→2这是
所以我知道您可以像这样进行对象析构:const{item}=data;还有像这样的数组解构:const[item]=data;您也可以在函数参数中执行此操作,例如:constx=({item})=>item;而且我看到了很多关于它的问题和答案。但是我还没有看到数组中嵌套对象的示例和很好的解释。consttest=[{count:1}];const[{count}]=test;我通常会这样做:constx=test[0];const{count}=x;直到今天在codepen中进行测试时,我才发现您可以在同一作业中同时析构它们。谁能解释一下我在执行[{count}]时发生了什么?因为我正