标签: variable-assignment

循环时花费更多; 作业或if语句?

考虑以下两种情况:

boolean b = false;
int i = 0;
while(i++ < 5) {
    b = true;
}
Run Code Online (Sandbox Code Playgroud)

要么

boolean b = false;
int i = 0;
while(i++ < 5) {
    if(!b) {
        b = true;
    }
}
Run Code Online (Sandbox Code Playgroud)

哪个更"昂贵"呢?如果答案取决于使用的语言/编译器,请提供.我的主要编程语言是Java.

请不要问我为什么要这样做的问题..它们只是指出相关的准系统示例:应该在循环中反复设置相同的值,还是应该在每个循环上测试它它拥有改变所需的价值?

performance variable-assignment

17
推荐指数
3
解决办法
9089
查看次数

仅当变量为nil时才分配空字符串(三元运算符)

我正在尝试实现以下C#代码的等价物:

someStringValue = someStringValue ?? string.Empty;
Run Code Online (Sandbox Code Playgroud)

if if someStringValue为null,将赋值string.Empty(空字符串"":).我如何在Objective-C中实现这一目标?是我唯一的选择:

if(!someStringValue)
   someStringValue = @"";
Run Code Online (Sandbox Code Playgroud)

解决方案感谢@Dave DeLong:

someStringValue = someStringValue ?: @"";
Run Code Online (Sandbox Code Playgroud)

cocoa-touch objective-c variable-assignment nsstring

17
推荐指数
1
解决办法
9430
查看次数

函数的增量被+ =覆盖

在三元运算符中调用的方法递增变量并返回布尔值.当函数返回false时,将还原该值.我期望变量为1但是变为0.为什么?

public class Main {
    public int a=0;//variable whose value is to be increased in function
    boolean function(){
        a++;
        return false;
    }
    public static void main(String argv[]){
        Main m=new Main();
        m.a+=(m.function()?1:0);
        System.out.println(m.a);//expected output to be 1 but got a 0 !!!!!
    }
}
Run Code Online (Sandbox Code Playgroud)

java increment variable-assignment ternary

17
推荐指数
2
解决办法
784
查看次数

JavaScript中的解构赋值

正如在JavaScript 1.7的Mozilla changlog中可以看到的,他们已经添加了解构分配.可悲的是,我不是很喜欢这种语法(为什么要写a和b两次?):

var a, b;  
[a, b] = f();
Run Code Online (Sandbox Code Playgroud)

这样的事情会好很多:

var [a, b] = f();
Run Code Online (Sandbox Code Playgroud)

这仍然是向后兼容的.类似Python的解构不会向后兼容.

无论如何,我能够想出的最好的JavaScript 1.5解决方案是:

function assign(array, map) {
    var o = Object();
    var i = 0;
    $.each(map, function(e, _) {
        o[e] = array[i++];
    });
    return o;
}
Run Code Online (Sandbox Code Playgroud)

其工作方式如下:

var array = [1,2];
var _ = assign[array, { var1: null, var2: null });
_.var1; // prints 1
_.var2; // prints 2
Run Code Online (Sandbox Code Playgroud)

但这真的很糟糕,因为_没有任何意义.它只是一个存储名称的空壳.但遗憾的是它需要因为JavaScript没有指针.在正面,您可以在值不匹配的情况下指定默认值.另请注意,此解决方案不会尝试切片阵列.所以你不能做类似的事情{first: 0, rest: 0}.但如果有人想要这种行为,那很容易做到.

什么是更好的解决方案?

javascript destructuring variable-assignment

16
推荐指数
1
解决办法
9979
查看次数

有没有一种正确的方法通过C++引用返回一个新的对象实例?

所以我写了一些代码,我有这样的事情:

class Box
{
    private:
    float x, y, w, h;

    public:
    //...
    Rectangle & GetRect( void ) const
    {
        return Rectangle( x, y, w, h );
    }
};
Run Code Online (Sandbox Code Playgroud)

然后在一些代码中:

Rectangle rect = theBox.GetRect();
Run Code Online (Sandbox Code Playgroud)

哪个在我的调试版本中有效,但在发行版中有"问题"通过引用返回Rectangle - 我基本上得到了一个未初始化的矩形.Rectangle类有一个=运算符和一个复制构造函数.在没有弄清楚为什么会破坏的情况下,我实际上更感兴趣的是通过引用返回(新)对象的正确方法,以便复制分配给变量.我只是傻吗?不应该这样做吗?我知道我可以返回一个指针,然后取消引用,但我不愿意.我的某些部分感觉像按值返回会导致对象的冗余复制 - 编译器是否会解决并优化它?

这似乎是一个微不足道的问题.经过多年的C++编码后,我感到尴尬,我不知道这一点,所以希望有人可以为我清除这一点.:)

c++ return reference object variable-assignment

16
推荐指数
4
解决办法
1万
查看次数

赋值语句值

每个人都知道在Python中,赋值不会返回一个值,大概是为了避免if在通常只是进行比较时对语句进行赋值:

>>> if a = b:
  File "<stdin>", line 1
    if a = b:
         ^
SyntaxError: invalid syntax

>>> if a == b:
...     pass
...
Run Code Online (Sandbox Code Playgroud)

出于同样的原因,人们可能会怀疑同一语句中的多个赋值也是语法错误.

实际上,a = (b = 2)这不是一个有效的表达式:

>>> a = (b = 2)
  File "<stdin>", line 1
    a = (b = 2)
           ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是:为什么a = b = 2在Python中工作,因为它适用于赋值语句有值的其他语言,比如C?

>>> a = b = c = 2
>>> a, b, c
(2, 2, 2)
Run Code Online (Sandbox Code Playgroud)

这种行为是否有记录?我在赋值语句文档中找不到任何相关内容:http: …

python variable-assignment

16
推荐指数
1
解决办法
1151
查看次数

c#多任务

int a, b, n;
...
(a, b) = (2, 3);
// 'a' is now 2 and 'b' is now 3
Run Code Online (Sandbox Code Playgroud)

这种事情在C#中真的很有帮助.在这个例子中,'a'和'b'没有被封装在一起,例如位置的X和Y可能是.这是否以某种形式存在?

下面是一个不太重要的例子.

(a, b) = n == 4 ? (2, 3) : (3, n % 2 == 0 ? 1 : 2);
Run Code Online (Sandbox Code Playgroud)

Adam Maras在评论中表示:

var result = n == 4 ? Tuple.Create(2, 3) : Tuple.Create(3, n % 2 == 0 ? 1 : 2);
Run Code Online (Sandbox Code Playgroud)

然而,当他指出它创建一个新的三元组而不是更改指定的值时,上述示例的工作类型.

Eric Lippert要求用例,因此可能:

(a, b, c) = (c, a, b); // swap or reorder on one …
Run Code Online (Sandbox Code Playgroud)

.net c# tuples variable-assignment

16
推荐指数
2
解决办法
5599
查看次数

Python将多个变量初始化为相同的初始值

我经历过这些问题,

  1. Python将多个变量分配给相同的值?列表 关于元组的行为
    ,我想只是变量可能是字符串,整数或字典
  2. 同时声明多个变量的更优雅方式
    问题有一些我想问的问题,但接受的答案要复杂得多

所以我想要实现的目标,

我声明了这个变量,并且我希望将此声明减少到尽可能少的代码行.

details = None
product_base = None
product_identity = None
category_string = None
store_id = None
image_hash = None
image_link_mask = None
results = None
abort = False
data = {}
Run Code Online (Sandbox Code Playgroud)

什么是最简单,易于维护?

python variables variable-assignment

16
推荐指数
4
解决办法
5万
查看次数

Golang混合分配和声明

我开始工作几周了,而且(再一次)我偶然发现了一些对我来说很奇怪的事情:

// Not working
a := 1
{
    a, b := 2, 3
}

// Works
a := 1
a, b := 2, 3
Run Code Online (Sandbox Code Playgroud)

操场

我想同时分配两个变量.一个已经宣布,在一个优越的范围,另一个不是.

它不起作用:编译器尝试重新声明前一个变量.但是,如果在同一范围内声明此变量,则它可以正常工作.

这是为什么 ?

variable-assignment go variable-declaration

16
推荐指数
2
解决办法
5697
查看次数

如何在IF中分配变量,然后返回它.(蟒蛇)

def isBig(x):
   if x > 4: 
       return 'apple'
   else: 
       return 'orange'
Run Code Online (Sandbox Code Playgroud)

这有效:

if isBig(y): return isBig(y)
Run Code Online (Sandbox Code Playgroud)

这不起作用:

if fruit = isBig(y): return fruit
Run Code Online (Sandbox Code Playgroud)

为什么第二个不起作用!?我想要1个班轮.除此之外,第一个将调用函数TWICE.

如何制作1个衬垫,不调用两次功能?

python if-statement variable-assignment

15
推荐指数
3
解决办法
4万
查看次数