你知道 赋值语句其实是有返回值的吗?

2019-03-11 11:26:49 +08:00
 rizon

今天写代码,偶然从 google 工具类的源码中发现了赋值语句是有返回值的! 然后我瞬间想明白了,一个之前困扰我许久的 if 语句块中直接使用赋值语句的那个很久之前的问题。 /t/531367

先放结果

    Long a;
    public Long test() {
        if ((a = 123L) == 321L) {
            System.out.println(a);
        }
        return a = 123L;
    }

网上有人分析过汇编,https://blog.csdn.net/w605283073/article/details/85219022

我估计还是有很多人不知道这件事,或者就是忘了,再或者就是没去想这个返回值是可以简化代码书写的。所以分享一下

7426 次点击
所在节点    程序员
41 条回复
1a0ma0
2019-03-11 11:32:23 +08:00
这不是常识吗……
smeraldo
2019-03-11 11:33:58 +08:00
火星😂。。
liuzhedash
2019-03-11 11:34:08 +08:00
没有被 i=i++这种考题折腾过嘛?
Lin0936
2019-03-11 11:35:05 +08:00
这。。。。。
congeec
2019-03-11 11:38:56 +08:00
你没用过 C 语言么?
你不知道 python 3.8 的 assignment expression 么?
lihongjie0209
2019-03-11 11:40:59 +08:00
C 就是这样,Java 从 C 直接抄过来的
Raymon111111
2019-03-11 11:41:16 +08:00
没读过源码吗...

很多这种
suit
2019-03-11 11:45:57 +08:00
在 C++,运算符可以用函数重载,所以有返回值一点都不奇怪
jeffersonpig
2019-03-11 11:50:04 +08:00
这真的是没几个人不知道的吧
yim7
2019-03-11 11:51:15 +08:00
学 c 没遇到过吗 ,while ( (ch = getchar()) != '#') {}
ballshapesdsd
2019-03-11 11:53:33 +08:00
我一个学 python 的都知道(微笑)
dorentus
2019-03-11 11:54:55 +08:00
并不是所有编程语言的赋值语句都是可求值(有返回值)的。
DOLLOR
2019-03-11 11:56:38 +08:00
你知道逗号(,)其实是有返回值的吗?
var a = (1, 2, 3);
console.log(a);//=>3
idyu
2019-03-11 11:59:17 +08:00
if(($erpRegistDateGeqUnix = strtotime($erpRegistDateGeq)) > 0) {
$data['erpRegistDateGeq'] = date('Ymd', $erpRegistDateGeqUnix);
}
PHP
zycpp
2019-03-11 12:02:11 +08:00
c 语言刷题必备语句
while((ch=getchar())!=EOF)
HuHui
2019-03-11 12:13:32 +08:00
b = (a+b) - (a=b);
看来没学过这个
expy
2019-03-11 12:15:34 +08:00
a=b=c 大概就用到了吧。
wingkou
2019-03-11 12:44:17 +08:00
@DOLLOR C 艹甚至还能重载逗号,这才是最骚的,lz 估计要更惊讶。
183shl
2019-03-11 13:20:08 +08:00
初学时经常被 if 中写一个=困扰半天😁
lazyfighter
2019-03-11 13:41:54 +08:00
之前看源码的时候 这个东西困扰了我很久

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/543248

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX