当前位置: 首页 > 面试题库 >

无法分配给属性:函数调用返回不可变值

谭畅
2023-03-14
问题内容

考虑以下示例。

struct AStruct{
    var i = 0
}

class AClass{
    var i = 0
    var a: A = A(i: 8)

    func aStruct() -> AStruct{
        return a
    }
}

如果我尝试更改类实例的变量,AClass则编译成功。

var ca = AClass()
ca.a.i = 7

但是,如果我尝试更改aStructmethod 的返回值,则编译会发出尖叫

ca.aStruct().i = 8 //Compile error. Cannot assign to property: function call returns immutable value.

有人可以解释一下。


问题答案:

这是编译器告诉您的修改struct无用的方式。

这是发生了什么:当你打电话aStruct(),一个 副本A回传给你。该副本是 临时的
。您可以检查其字段,或将其分配给变量(在这种情况下,您将能够重新访问您的修改)。如果编译器允许您对该临时结构进行修改,则将无法访问它们。这就是为什么编译器确定这是编程错误的原因。



 类似资料:
  • 问题内容: 很多人说评论中的要求太多,这让我犹豫不决,但是我仍然没有在他们的答案中找到解决方案,主要是因为(1)他们通常使用jQuery,而(2)问题通常包含我不理解的技术。 我有一个函数,里面有一个变量。变量被分配了一个功能。我敢肯定,这个概念不是AJAX独有的,但这是我正在使用的上下文(如果有区别的话)。 我想将变量传递给函数。但是,由于没有原始函数声明,如何指定参数?我能做到吗? 问题答案:

  • 问题内容: 在Go中,如何将函数调用返回的值分配给指针? 考虑下面的示例,注意返回一个值(不是指针): 这些都失败了: 是否确实需要局部变量?那不会招致不必要的复制吗? 问题答案: 根据规范,必须使用局部变量。 要获取值的地址,调用函数必须将返回值复制到可寻址的内存中。有副本,但这不是多余的。 Go程序通常使用值。 有时在应用程序想要区分无值和其他时间值的情况下使用A。在SQL NULL和有效时间

  • 问题内容: 我有一个Python函数fooPy(),它返回一些值。(int / double或string) 我想使用此值并在shell脚本中分配它。例如,以下是python函数: 在shell脚本中,我尝试了以下操作,但是它们都不起作用。 问题答案: 您可以在Python中打印您的值,如下所示: 并在您的shell脚本中: 确保不要在shell脚本中的空格周围。

  • 问题内容: java中有什么方法可以返回新数组而不先将其分配给变量?这是一个例子: 我想做这样的事情,但是不起作用: 问题答案: 即使不将其分配给变量,您仍然需要创建该数组。试试这个: 您的代码示例无效,因为编译器一方面仍然需要知道要通过静态初始化创建的类型。

  • 问题内容: 假设我有一个功能 现在,我想将函数分配给一个名为的变量,这样,如果我使用,它将再次调用该函数。如果我只是做作业,它就会返回。 问题答案: 您根本不调用该函数。 括号告诉蟒蛇,你调用的函数,所以当你把它们放在那里,它调用的功能,并指定值 返回 的(在这种情况下)。

  • 问题内容: 我正在使用Postgresql 8.3,并具有以下简单功能,该功能会将a返回 给客户端 现在,我可以使用以下SQL命令来调用此函数并操纵返回的游标,但是游标名称是由PostgreSQL自动生成的 此外,如38.7.3.5中所述,显式地将游标名称声明为函数的输入参数 。返回游标。我可以声明自己的游标名称并使用此游标名称来操纵返回的游标,而不是为我自动生成的Postgresql吗?如果不是