- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我最近写了一个函数和一些相关代码,充当一种开关表达式(按预期工作)和 posted it on CodeReview.SE
从那以后,我开始尝试改进我自己的代码,但似乎遇到了瓶颈,因为我的代码似乎让 playground 挂起,并且在放入项目时也无法编译。然而,当在项目中输入所有内容时,Xcode 不会提示,直到我真正尝试构建它。这是我拥有的:
func caze<T: Equatable, R>(vals: T..., @autoclosure(escaping) ret f: () -> R) -> (AnySequence<T>, () -> R) {
return (AnySequence(vals), f)
}
func caze<T, R where T: Equatable, T: ForwardIndexType>(range: Range<T>, @autoclosure(escaping) ret f: () -> R) -> (AnySequence<T>, () -> R) {
return (AnySequence(range), f)
}
func schwitch<T: Equatable, R>(value: T, _ cases: (AnySequence<T>, () -> R)..., @autoclosure def: () throws -> R) rethrows -> R {
for (vals, f) in cases {
if vals.contains(value) {
return f()
}
}
return try def()
}
func test() {
schwitch(5,
caze(0, ret: "hello"),
caze(1, 2, ret: "test"),
caze(3..<7, ret: "lol"),
def: "nop")
schwitch("helloo",
caze("hello", "Hello", ret: "test"),
def: "nop")
}
这是我在尝试构建项目时遇到的错误:
Command failed due to signal: Segmentation fault: 11
和堆栈跟踪:
0 swift 0x000000010c7f366b llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 43
1 swift 0x000000010c7f2956 llvm::sys::RunSignalHandlers() + 70
2 swift 0x000000010c7f3ccf SignalHandler(int) + 287
3 libsystem_platform.dylib 0x00007fff87f0752a _sigtramp + 26
4 libsystem_platform.dylib 0x00007f82f4bf0418 _sigtramp + 1825476360
5 swift 0x000000010ab9e994 (anonymous namespace)::ApplyClassifier::classifyRethrowsArgument(swift::Expr*, swift::Type) + 52
6 swift 0x000000010ab9ea2b (anonymous namespace)::ApplyClassifier::classifyRethrowsArgument(swift::Expr*, swift::Type) + 203
7 swift 0x000000010ab9f02a (anonymous namespace)::ApplyClassifier::classifyRethrowsArgument(swift::Expr*, swift::Type) + 1738
8 swift 0x000000010ab9e56c (anonymous namespace)::ApplyClassifier::classifyApply(swift::ApplyExpr*) + 652
9 swift 0x000000010ab9dc86 (anonymous namespace)::ErrorHandlingWalker<(anonymous namespace)::CheckErrorCoverage>::walkToExprPre(swift::Expr*) + 278
10 swift 0x000000010ac45854 swift::ASTVisitor<(anonymous namespace)::Traversal, swift::Expr*, swift::Stmt*, bool, swift::Pattern*, bool, void>::visit(swift::Stmt*) + 148
11 swift 0x000000010ac42ef7 swift::Stmt::walk(swift::ASTWalker&) + 87
12 swift 0x000000010ab9d9d5 swift::TypeChecker::checkFunctionErrorHandling(swift::AbstractFunctionDecl*) + 405
13 swift 0x000000010ab7ef1b typeCheckFunctionsAndExternalDecls(swift::TypeChecker&) + 1451
14 swift 0x000000010ab7f665 swift::performTypeChecking(swift::SourceFile&, swift::TopLevelContext&, swift::OptionSet<swift::TypeCheckingFlags, unsigned int>, unsigned int) + 1765
15 swift 0x000000010aa00eb4 swift::CompilerInstance::performSema() + 4580
16 swift 0x000000010a543596 performCompile(swift::CompilerInstance&, swift::CompilerInvocation&, llvm::ArrayRef<char const*>, int&) + 934
17 swift 0x000000010a54268d frontend_main(llvm::ArrayRef<char const*>, char const*, void*) + 2781
18 swift 0x000000010a53e0ac main + 1932
19 libdyld.dylib 0x00007fff912a35ad start + 1
问题似乎出在函数的使用上,因为如果我省略那部分,一切都可以正常编译。仅使用 caze
似乎也可以正常工作,因为以下内容也按预期工作:
caze(5, ret: "hello")
let test: (AnySequence<Int>, () -> String) = caze(0...5, ret: "hello") // Swift needs some help figuring out which function to use here
这仅仅是 Swift 编译器中的错误还是我遗漏了什么?
最佳答案
首先:正如 Bryan 所说,这肯定是一个编译器错误,它应该永远不会崩溃。
要解决这个问题:根本原因似乎是 rethrows
,因为使用以下编译和运行没有任何问题。这与堆栈跟踪 5 - 7 classifyRethrowsArgument
相匹配。
func schwitch<T: Equatable, R>(value: T, cas cases: (AnySequence<T>, () -> R)..., @autoclosure def: () -> R) -> R {
for (vals, f) in cases {
if vals.contains(value) {
return f()
}
}
return def()
}
同样适用
func schwitch<T: Equatable, R>(value: T, cas cases: (AnySequence<T>, () -> R)..., @autoclosure def: () throws -> R) -> R {
for (vals, f) in cases {
if vals.contains(value) {
return f()
}
}
return try! def()
}
我知道这远不是一个完整的答案,但我想至少对我发现的内容给出一些提示。如果您不需要能够抛出此代码的默认情况应该适合您。我将尝试弄清楚为什么 rethrows
会导致问题。
TypeCheckError.cpp
swift 编译器可能有助于解决这个问题。
关于Swift 编译器挂起(可能是泛型参数的类型推断),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37673810/
我正在尝试编写一个相当多态的库。我遇到了一种更容易表现出来却很难说出来的情况。它看起来有点像这样: {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE
谁能解释一下这个表达式是如何工作的? type = type || 'any'; 这是否意味着如果类型未定义则使用“任意”? 最佳答案 如果 type 为“falsy”(即 false,或 undef
我有一个界面,在IAnimal.fs中, namespace Kingdom type IAnimal = abstract member Eat : Food -> unit 以及另一个成功
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: What is the difference between (type)value and type(va
在 C# 中,default(Nullable) 之间有区别吗? (或 default(long?) )和 default(long) ? Long只是一个例子,它可以是任何其他struct类型。 最
假设我有一个案例类: case class Foo(num: Int, str: String, bool: Boolean) 现在我还有一个简单的包装器: sealed trait Wrapper[
这个问题在这里已经有了答案: Create C# delegate type with ref parameter at runtime (1 个回答) 关闭 2 年前。 为了即时创建委托(dele
我正在尝试获取图像的 dct。一开始我遇到了错误 The function/feature is not implemented (Odd-size DCT's are not implemented
我正在尝试使用 AFNetworking 的 AFPropertyListRequestOperation,但是当我尝试下载它时,出现错误 预期的内容类型{( “应用程序/x-plist” )}, 得
我在下面收到错误。我知道这段代码的意思,但我不知道界面应该是什么样子: Element implicitly has an 'any' type because index expression is
我尝试将 SignalType 从 ReactiveCocoa 扩展为自定义 ErrorType,代码如下所示 enum MyError: ErrorType { // .. cases }
我无法在任何其他问题中找到答案。假设我有一个抽象父类(super class) Abstract0,它有两个子类 Concrete1 和 Concrete1。我希望能够在 Abstract0 中定义类
我想知道为什么这个索引没有用在 RANGE 类型中,而是用在 INDEX 中: 索引: CREATE INDEX myindex ON orders(order_date); 查询: EXPLAIN
我正在使用 RxJava,现在我尝试通过提供 lambda 来订阅可观察对象: observableProvider.stringForKey(CURRENT_DELETED_ID) .sub
我已经尝试了几乎所有解决问题的方法,其中包括。为 提供类型使用app.use(express.static('public'))还有更多,但我似乎无法为此找到解决方案。 index.js : imp
以下哪个 CSS 选择器更快? input[type="submit"] { /* styles */ } 或 [type="submit"] { /* styles */ } 只是好
我不知道这个设置有什么问题,我在 IDEA 中获得了所有注释(@Controller、@Repository、@Service),它在行号左侧显示 bean,然后转到该 bean。 这是错误: 14-
我听从了建议 registering java function as a callback in C function并且可以使用“简单”类型(例如整数和字符串)进行回调,例如: jstring j
有一些 java 类,加载到 Oracle 数据库(版本 11g)和 pl/sql 函数包装器: create or replace function getDataFromJava( in_uLis
我已经从 David Walsh 的 css 动画回调中获取代码并将其修改为 TypeScript。但是,我收到一个错误,我不知道为什么: interface IBrowserPrefix { [
我是一名优秀的程序员,十分优秀!