以下代码可以正常工作
struct carConfi {
var owner: String?
let brand: String = "BMW"
var currentMile: Double = 2000
}
let tomCar = carConfi()
但是,如果我将属性的类型更改owner
为常量,则初始化器会出现错误
struct carConfi {
let owner: String? // Change to constant
let brand: String = "BMW"
var currentMile: Double = 2000
}
let tomCar = carConfi() //error: missing argument for parameter 'owner' in call
我做了一点搜索,结果是因为 可选 变量自动具有默认值nil
我猜:
因为一旦设置了常量,就无法对其进行更改,如果自动接收到可选常量,nil
那么它将保持为不可更改nil
,这是非常愚蠢的,并且可能会对用户不利。
问题: 我的大学并不完全相信这个猜测,他告诉我一定有更多的理由。如果有人可以向我解释,我将不胜感激
谢谢
不使用以下任何一种设置只读(常量)字段:
几乎可以肯定地表明您的程序有错误。
由于您没有其他机会设置let
字段的值,因此该字段的值将保持不变nil
(或其他一些默认值)。程序员不太可能会发现这种行为是可取的,并有意要求它。
这就是为什么Swift将这种情况标记为错误。另一方面,如果您实际上希望String
常量保持不变nil
,则可以添加一个表达式以将其设置为nil
,并使错误静音:
let owner: String? = nil // Pretty useless, but allowed
问题内容: 为什么在类中声明的变量具有默认值,但是在方法内部声明的变量(称为“局部变量”)在Java中没有默认值? 例如 在上面的示例中,变量的默认值为0,但是变量给出了可能尚未初始化的错误。 问题答案: 所有成员变量都必须加载到堆中,因此在创建类的实例时必须使用默认值进行初始化。对于局部变量,它们不会被加载到堆中,直到在Java7之前被使用,它们才会存储在堆栈中,因此我们需要显式初始化它们。现在
问题内容: 如果尝试在表上创建TEXT列,并在MySQL中为其提供默认值,则会收到错误消息(至少在Windows上如此)。我看不到任何原因为何文本列不应具有默认值。MySQL文档未给出任何解释。对我来说似乎不合逻辑(并且有些沮丧,因为我想要一个默认值!)。有人知道为什么不允许这样做吗? 问题答案: Windows MySQL v5引发错误,但Linux和其他版本仅引发警告。这需要解决。 WTF?
我有一个这样的程序: 如果我尝试执行它,我会得到如下编译器错误:< code >变量x可能没有初始化基于java默认值,我应该得到下面的输出对吗?? 最终变量会有默认值吗? 如果我这样更改代码, 我得到的输出是: 有人能解释一下这种行为吗。。
我正在准备JavaOCA认证,遇到了一个类似的问题,如下所示: 按照Java,实例和静态变量被赋予默认值。令人惊讶的是,我的控制台上显示的错误是: 为什么没有在上面分配默认值?
首先,我的声明是: 我的主要活动获取编号和文本: 我的Activity2应该得到数字和文本: 文本很受欢迎,但数值始终为0。
问题内容: 考虑程序的三个不同的运行: 是否可以在第一种情况下,第二种情况下,第三种情况下使用? 问题答案: 带有参数的参数可以很好地处理此三向输入。 我也可以给它一个参数。 如何使用argparse在python中添加多个参数选项?