首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通用Swift结构:分段错误: 11

通用Swift结构:分段错误: 11
EN

Stack Overflow用户
提问于 2016-12-23 00:51:35
回答 2查看 392关注 0票数 1

我正在尝试实现符合Hashable协议的具有泛型类型的结构。谁能帮我理解为什么我得到“分段错误: 11”错误与以下代码。

我非常感谢你对此有任何见解。

代码语言:javascript
复制
struct Pmf<Element: Hashable> {
    typealias Distribution = [Element : Float]
    fileprivate var normalized = false

    fileprivate var distribution:[Element : Float] = [ : ] {
        didSet {
            self.normalized = false
        }
   }
}

extension Pmf {
    init(values: [Element], withProbs probs: [Float]) {
        for pair in zip(values, probs) {
            self.distribution[pair.0] = pair.1
        }
    }

    var probDist: Distribution {
        mutating get {
            if !normalized {
                self.normalize()
            }
            return self.distribution
        }
    }

    subscript(value: Element) -> Float? {
        mutating get {
            if !normalized {
                self.normalize()
            }
            return self.distribution[value]
        }
        set(prob) {
            self.distribution[value] = prob
        }
    }
    mutating func normalize() {
        for (key, val) in self.distribution {
            self.distribution[key] = val / Float(self.distribution.count)
        }
    }
}

var pp = Pmf<String>()

pp["One"] = 4
pp["Two"] = 5
pp["three"] = 5

print(pp)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-23 02:40:48

似乎您需要一个小技巧来为扩展名中的值类型定义一个初始化器:

init(values:withProbs:)中添加一行,如下所示:

代码语言:javascript
复制
init(values: [Element], withProbs probs: [Float]) {
    self.init() //<-
    for pair in zip(values, probs) {
        self.distribution[pair.0] = pair.1
    }
}

无论如何,编译器不应该与SegFault 11崩溃。即使源代码有一些错误。

你最好发一封苹果的Bug报告,或者寄给swift.org

票数 1
EN

Stack Overflow用户

发布于 2017-01-07 15:42:44

我开始为类似的情况编写错误报告(使用带有关联类型的泛型添加方法减速),并且每次尝试的组合都会得到分段错误。

我开始在操场上写一个“最小可验证的例子”,发现我无法复制这个错误。

app和操场之间唯一的区别是app在不同的源文件中有协议和方法。

我合并了两个源文件,不再有分段错误!!

这花了我几个小时的时间来追踪,希望它能帮助到其他人。

更新:为这个错误提交了一个错误,如果您也遇到了这个错误,请添加一个注释,让团队知道您遇到了它:https://bugs.swift.org/browse/SR-3595

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41293771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档