- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我觉得这比什么都有趣。我已经修好了,但我想知道原因。这是错误:DataManager.swift:51:90:表达式太复杂,无法在合理的时间内解决;考虑将表达式分解为不同的子表达式
。它为什么提示?这似乎是最简单的表达方式之一。
编译器指向columns + ");";
部分
func tableName() -> String { return("users"); }
func createTableStatement(schema: [String]) -> String {
var schema = schema;
schema.append("id string");
schema.append("created integer");
schema.append("updated integer");
schema.append("model blob");
var columns: String = ",".join(schema);
var statement = "create table if not exists " + self.tableName() + "(" + columns + ");";
return(statement);
}
修复是:
var statement = "create table if not exists " + self.tableName();
statement += "(" + columns + ");";
这也有效(通过@efischency),但我不太喜欢它,因为我认为 (
迷路了:
var statement = "创建表,如果不存在\(self.tableName()) (\(columns))"
最佳答案
我不是编译器方面的专家 - 我不知道这个答案是否会“以有意义的方式改变你的想法”,但我对这个问题的理解是这样的:
它与类型推断有关。每次您使用 +
运算符时,Swift 都必须搜索 +
的所有可能重载并推断您使用的是哪个版本的 +
.我计算了不到 30 个 +
运算符的重载。这有很多可能性,当您将 4 或 5 个 +
操作链接在一起并要求编译器推断所有参数时,您所要求的比乍一看要多得多。
该推断可能会变得复杂 - 例如,如果您使用 +
添加一个 UInt8
和一个 Int
,输出将是一个 Int
,但还有一些工作涉及评估混合类型与运算符的规则。
当您使用文字时,例如示例中的 String
文字,编译器会将 String
文字转换为 String
,然后为 +
运算符等推断参数和返回类型。
如果表达式足够复杂 - 即,它需要编译器对参数和运算符进行太多推断 - 它会退出并告诉你它退出了。
一旦表达式达到一定的复杂程度,就让编译器退出是有意为之的。另一种方法是让编译器尝试并执行它,看看它是否可以,但这是有风险的——编译器可能会一直尝试下去,陷入困境,或者只是崩溃。所以我的理解是,编译器不会超出表达式复杂性的静态阈值。
我的理解是 Swift 团队正在致力于编译器优化,以减少这些错误的发生。 You can learn a little bit about it on the Apple Developer forums by clicking on this link .
在开发论坛上,Chris Lattner 要求人们将这些错误作为雷达报告提交,因为他们正在积极修复它们。
这就是我在阅读此处和 Dev 论坛上的许多帖子后的理解方式,但我对编译器的理解是幼稚的,我希望对编译器如何处理这些任务有更深入了解的人能够扩展关于我在这里写的内容。
关于ios - Swift 编译器错误 : "Expression too complex" on a string concatenation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40106710/
在OOCalc中,我想使用CONCATENATE函数为A列中的每个字符串添加引号。 所以在单元格 B1 中我想做: =CONCATENATE("\"",A1,"\"") OOCalc 不喜欢这样,或者
我对此进行了编码,当我运行它时,它向我显示一条消息,变量“Number”与其余串联“大于5”之间的“+”中存在问题 这是代码 fun main(args: Array) { print("En
我正在尝试连接多个 dask 数据帧,但这会导致我的所有 RAM 都用完并使我的环境 (Google Colab) 崩溃。 我曾尝试与 Dask 连接,因为我听说 Dask 会对文件进行分区,以便更容
常规语言在串联下是封闭的 - 这可以通过使一种语言的接受状态以 epsilon 过渡到下一种语言的开始状态来证明。 如果我们考虑语言 L = {a^n | n >=0},这种语言是正则的(就是一个*)
有什么方法可以跨多行使用 | 字符串运算符? 使用经典的 CONCATENATE 标记,您可以进行如下分配: CONCATENATE 'A rubber duck is a toy shaped li
我有一个表单,其中包含许多格式为 name="field-1" name="field-2" name="field-3" name="field-4" 等等.... 在表单操作页面上,我希望能够使用
我们如何连接动态工作区的字段?这个想法在下面的代码中: LOOP AT lt_final INTO DATA(ls_final). CONCATENATE ls_final-field1
我需要将符号从 4 位数字扩展到 32 位数字。 我尝试像这样重复 MSB 28 次: assign x={28'b{a[3]},a[3:0]}; 但是,我得到一个错误: Syntax error n
我的数据如下所示: ColumnName PrimaryKey 1 ID Y 2 JOB_NAME N 3 JOB_DES
我试图用 Perl6 连接一个字符串,因此: my $cmd = "databricks jobs --job-id 37 --notebook-params '\{"; put $cmd; $cmd
我是 verilog 的初学者。 几乎所有的连接示例如下。 wire [3:0] result; reg a, b, c, d; result = {a, b, c, d}; 以下也可以吗? wir
我正在尝试在 VHDL 上实现它: a<=(b+c)/16; 这个我试过了,但是synthesis不接受。 signal b,c : std_logic_vector(7 downto 0); s
我很难理解 Verilog 中的以下语法: input [15:0] a; // 16-bit input output [31:0] result; // 32-bit output a
假设我有一个占位符 ph_input = tf.placeholder(dtype=tf.int32, [无, 1]) 和一个向量 h = tf.zeros([1,2], dtype=tf.int32
假设我有 ceylon 字符串列表。 (不一定是 List ;它可以是可迭代对象、序列、数组等)将所有这些字符串连接成一个字符串的最佳方法是什么? 最佳答案 最有效的解决方案是使用静态方法String
这个问题已经有答案了: Why does Java's concat() method not do anything? (6 个回答) 已关闭 8 年前。 我找到了这段代码 public class
似乎预处理器在连接有符号数字的 token 时添加了一个空格。 我试过这个: #define DECL_FL(IE) 1e##IE##f float val[] = { DECL_FL(12)
我正在实现一个基于作者的图书搜索功能。我应该返回一个查询结果,其中包含查询作者撰写的所有书籍。但是,对某些作者姓名的查询可能会返回多个结果(例如,查询“Smith, W”可能会匹配“Smith, We
我正在尝试将多个单元格添加在一起,并且在它们之间,我需要一个 IF 公式。我基本上是根据我拥有的列表制作 HTML 输出,我需要检查列中是否有“事件”或“终止”,并根据该列表选择要使用的 html 类
通常,当您链接到另一个单元格时,您会返回该单元格的内容。 我想做的是这样的: =HYPERLINK(CONCATENATE("=C:/documents/'[",B15,".xls]Sheet 1'!
我是一名优秀的程序员,十分优秀!