我正在尝试遍历接口(interface)片段以通过 id 查找我的特定结构并更改属性。
type A struct {
ID ID
Steps []Step
}
type Step interface{}
type B struct {
ID ID
}
type C struct {
ID ID
}
func (s *A) findStepByID(id ID) (Step, error) {
for index, step := range s.Steps {
switch stepType := step.(type) {
case A:
if stepType.ID == id {
return step, nil
}
case B:
if stepType.ID == id {
return step, nil
}
default:
return nil, errors.New("no step found")
}
}
return nil, errors.New("no step found")
}
当我找到我的结构时,例如 B 然后我将设置 B.ID = xy
最佳答案
findStepByID 函数返回一个接口(interface){}。如果您想为 ID 分配一个新值,您必须将其显式转换为一个类型
这里假设您按原样使用 case 来更新结果并使用更新后的值。您可以通过两种方式进行操作
不要使用空接口(interface)interface{},而是使用定义了函数 UpdateID(ID) 的接口(interface)
使用类型开关,内部开关只做更新
我不建议第二个,因为它有范围问题
关于Golang 界面 slice ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42159412/
来自docsforRubyv2.5e=[1,2,3].mappe.next#=>1e.feed"a"pe.next#=>2e.feed"b"pe.next#=>3e.feed"c"begine.nextrescueStopIterationp$!.result#=>["a","b","c"]end但是当我通过Enumerator.new创建我的枚举时呢?#anaivereworkoftheaboveenume2=Enumerator.newdo|y|[1,2,3].eachdo|x|y1e2.feed"a"pe2.next#=>2e2.feed"b"pe2.next#=>3e2.fee
我不明白为什么在Ruby中,Array#slice和Array#slice!的行为与Array#sort和Array#sort!(一个返回新数组的结果,另一个处理当前对象)。使用sort第一个(没有爆炸),返回当前数组的排序副本,并且sort!对当前数组进行排序。slice,返回指定范围的数组,slice!从当前对象删除指定范围。Array#slice!的行为为何如此,而不是使当前对象成为具有指定范围的数组?例子:a=[0,1,2,3,4,5,6,7,8,9]b=a.slice(2,2)puts"slice:"puts"a="+a.inspectputs"b="+b.inspectb=
Scala有Rubys的版本吗each_slice来自Array类? 最佳答案 Scala2.8有grouped将数据分成大小为n的block(可用于实现each_slice功能):scala>vala=Array(1,2,3,4,5,6)a:Array[Int]=Array(1,2,3,4,5,6)scala>a.grouped(2).foreach(i=>println(i.reduceLeft(_+_)))3711据我所知,在2.7.x中没有任何东西可以开箱即用,但是从take(n)和drop(n)来自RandomAccess
这个问题在这里已经有了答案:Rubyarrayaccess2consecutive(chained)elementsatatime(4个答案)关闭3年前。给定这个Ruby数组:[1,2,3,4,5]像这样迭代它的最简单方法是什么?[[1,2],[2,3],[3,4],[4,5]]还是这个?[[1,2,3],[2,3,4],[3,4,5]]
1、创建一个QT工程newproject—>Application—>QtWidgetsApplication—>choose…(注意不要有中文路径)填写名称(我写的名称为class2)和创建路径(D:\qt\qt_demo\class2)—>填写类名,这里基类要选择“QWidget”,这样一个QT工程就创建好啦。qt的移植性非常强,一套代码我们不用修改太多,直接通用所有的平台。说明:QMainWindow:主窗口类,主窗口具有主菜单栏、工具栏和状态栏,类似于一般的应用程序的主窗口。QWidget:它是所有具有可视界面的基类,选择QWidget创建的界面对各种界面组件都可以支持。QDialog
如果我有一个数组a:a[a.length]返回nil。好。a[a.length,x]返回[]。好。a[a.length+x,y]返回nil。与2不一致。虽然此行为是documented,看起来很奇怪。谁能解释一下这种设计背后的原因? 最佳答案 考虑一下a=[0,1,2,3]#=>[0,1,2,3]a[0,10]#=>[0,1,2,3]a[1,10]#=>[1,2,3]a[2,10]#=>[2,3]a[3,10]#=>[3]a[4,10]#=>[]a[5,10]#=>nil所以a[4,10]是3之间的切片和数组的末尾[]哪里a[4]和
如果我有arr=[1,2,3,4]我知道我可以执行以下操作...>arr.each_slice(2){|a,b|puts"#{a},#{b}"}1,23,4...和...>arr.each_with_index{|x,i|puts"#{i}-#{x}"}0-11-22-33-4...但是是否有内置的方法来做到这一点?>arr.each_slice_with_index(2){|i,a,b|puts"#{i}-#{a},#{b}"}0-1,22-3,4我知道我可以构建自己的并将其粘贴到数组方法中。只是想看看是否有内置函数可以执行此操作。 最佳答案
上一个posts已经讨论过Array.prototype.slice.call(arguments)是如何工作的,但我不明白你为什么使用call而不是apply当apply用于类似数组的对象时,而call用于以逗号分隔的对象列表。arguments不是应该使用apply而不是call的类数组对象吗? 最佳答案 如果您想将参数传递给数组中的slice而不是一个一个地传递,那就有区别了。你可以这样做[1,2,3,4,5,6,7]----ourexampleargumentsArray.prototype.slice.call(argum
我们可以使用以下两种方法实现类数组对象的迭代:letarrayLike=document.getElementsByClassName('dummy');[].forEach.call(arrayLike,(e)=>{console.log(e);});Test1Test2或者先使用slice将类数组对象转换为数组:letarrayLike=document.getElementsByClassName('dummy');Array.prototype.slice.call(arrayLike).forEach((e)=>{console.log(e);});Test1Test2哪个更
关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭4年前。Improvethisquestion我有一个客户在寻找类似于Facebook和Google用来突出显示界面变化的类型的内联帮助系统。这是UI模式中的示例:http://ui-patterns.com/users/1/collections/38/entry/5759在推介自定义解决方案之前,我真的需要了解是否有任何现有的库或服务可提供此功能。我在StackOverflow和Google(以及其他网站)上