我知道赋值运算符是右关联的.
所以例如 x = y = z = 2
相当于(x = (y = (z = 2)))
既然如此,我尝试了以下方法:
foo.x = foo = {a:1}
Run Code Online (Sandbox Code Playgroud)
我期望foo
使用value创建对象{a:1}
,然后x
将创建属性,该属性foo
将只是foo
对象的引用.
(实际上,如果我要将多个赋值语句分成两个单独的语句,会发生什么foo = {a:1};foo.x = foo;
)
结果实际上是:
ReferenceError:未定义foo(...)
那么我尝试了以下内容:
var foo = {};
foo.x = foo = {a:1};
Run Code Online (Sandbox Code Playgroud)
现在我不再得到例外但是foo.x
未定义!
为什么作业不按我的预期工作?
var
关键字创建的变量相关联.这不是问题所在. javascript operator-precedence associativity multiple-assignment
看完这个和这个,这是非常相似,我的问题,我仍然无法理解以下行为:
a = 257
b = 257
print(a is b) #False
a, b = 257, 257
print(a is b) #True
Run Code Online (Sandbox Code Playgroud)
打印时id(a)
,id(b)
我可以看到在单独的行中分配值的变量具有不同的ID,而对于多个赋值,两个值具有相同的id:
a = 257
b = 257
print(id(a)) #139828809414512
print(id(b)) #139828809414224
a, b = 257, 257
print(id(a)) #139828809414416
print(id(b)) #139828809414416
Run Code Online (Sandbox Code Playgroud)
但是,通过说多个相同值的赋值总是创建指向同一个id的指针,从而解释这种行为是不可能的:
a, b = -1000, -1000
print(id(a)) #139828809414448
print(id(b)) #139828809414288
Run Code Online (Sandbox Code Playgroud)
是否有一个明确的规则,它解释了变量何时变得相同id
而不是?
编辑
相关信息:此问题中的代码以交互模式运行(ipython3)
我刚刚注意到这是有效的 PowerShell 代码:
PS> $first, $rest = @(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)
该语句将数组中的第一项放入 中$first
,将其余项目放入 中$rest
。
PS> $first
1
PS> $rest
2
3
Run Code Online (Sandbox Code Playgroud)
它甚至适用于任意数量的变量,将当前头部推入下一个变量,将尾部推入最后一个变量。你可以自己尝试一下。
PS> $first, $second, $rest = @(1, 2, 3, 4)
Run Code Online (Sandbox Code Playgroud)
$null
如果没有足够的头或尾可以放入其中一个变量,它似乎会分配一个值。即使在这种情况下$rest
(我宁愿看到一个空数组,但无论如何)。
PS> $first, $second, $rest = @(1)
PS> $first
1
PS> $second
PS> $second -eq $null
True
PS> $rest
PS> $rest -eq $null
True
PS> $rest -eq @()
False
Run Code Online (Sandbox Code Playgroud)
问题,也是我的问题,是我没有在任何地方看到这个记录!我正在尝试找出何时支持此功能。具体是如何实施的。如果它适用于任何其他类型。
我检查了about_Assignment
、about_Arrays
、 、about_Splatting
,但没有任何运气。
arrays powershell variable-assignment assignment-operator multiple-assignment
有没有办法在JavaScript中执行多个赋值,如下所示:
var a, b = "one", "two";
Run Code Online (Sandbox Code Playgroud)
这相当于:
var a = "one";
var b = "two";
Run Code Online (Sandbox Code Playgroud) 在Python中你可以做这样的事情:
x,y = 1,2
Run Code Online (Sandbox Code Playgroud)
或者
x,y = function_that_returns_two_elements()
Run Code Online (Sandbox Code Playgroud)
我试图在 R 中做类似的事情,但没有找到解决方案。是否可以?
我在我使用的程序中找到了一些代码:
PWSTR myWchar = NULL;
WCHAR *p = myWchar = new WCHAR[4];
Run Code Online (Sandbox Code Playgroud)
我如何读取带有两个等号的行?
它是如何计算的?
A:
myWchar = new WCHAR[4];
WCHAR *p = myWchar
Run Code Online (Sandbox Code Playgroud)
或乙:
WCHAR *p = myWchar ;
myWchar = new WCHAR[4];
Run Code Online (Sandbox Code Playgroud)