2013-11-24 69 views
0

我看到了这个在互联网上,我想不到这是什么:这个变量是什么意思?

他们创建了布尔命名障碍,并将其设置为false。

public bool obstacles = false; 

但是,这是什么行约:

obstacles = obstacles ? false : true; 

    if (obstacles) 
    { 
     transform.renderer.material.color = new Color(.5f, .5f, 0.0f); 
    } 

    else 
    { 
     transform.renderer.material.color = Color.white; 
    } 

我知道,如果和其他功能,当有一个障碍,转材料到指定的颜色,或者如果没有一个障碍物,将材料变成白色。但是,这条线是什么:障碍物=障碍物?假:真;

谢谢..对不起,这个新手问题。

+2

我宁愿写代码'障碍=!obstacles'或去与史蒂夫的做法,但现在你知道它meaans。 – Silvermind

+0

@Silvermind,可能是你的更好 – Steve

+0

@Silvermind:如果我想采纳你的建议。代码就像'if'语句将执行'obstacle'或'obstacle = true','else'语句将执行'!obstacle'或'obstacle = false'。先生,我有什么不对吗?是的,现在我已经知道了。感谢你和所有人 – Kaoru

回答

5

?:这就是所谓的ternary operator

条件运算符(?:)取决于 两个值中的一个的布尔表达式的值返回。以下是 条件运算符的语法。

条件? first_expression:second_expression;

备注

条件必须为真或假。如果条件为真,则 first_expression将被计算并成为结果。如果条件为 false,则second_expression将被计算并成为结果。评估两个表达式中只有一个 。

第一个表达式和第二个表达式的类型必须是 相同,或者必须存在从一个类型到另一个类型的隐式转换。

从MSDN的例子清楚:

int input = Convert.ToInt32(Console.ReadLine()); 
string classify; 

// if-else construction. 
if (input < 0) 
    classify = "negative"; 
else 
    classify = "positive"; 

// ?: conditional operator. 
classify = (input < 0) ? "negative" : "positive"; 

由于吊杆正确地指出的那样,你可以尝试这样使用的if else语句来你想要完成的任务:

if (!obstacles) 
{ 
    transform.renderer.material.color = new Color(.5f, .5f, 0.0f); 
    obstacles = true; 
} 

else 
{ 
    transform.renderer.material.color = Color.white; 
    obstacles = false; 
} 
2

该行基本上将“障碍”变量的值“翻转”为相反的值。如果障碍是真的,它将其值改为假,反之亦然。所以,这段代码的作者可能试图在这里画一个类似于交错模式的东西。

1
?: called ternary operator 

功能:

​​

装置

if(Condition== true) 
value=value1; 
else 
value=value2; 

您的代码:

public static bool obstacles = true; 
bool value=(obstacles = obstacles) ? false : true; 

输出:value=false

您的expression => (obstacles = obstacles)总是评估为obstacles中的任何值,因此这里是true。 因此这里的第一个值false将分配给您的variablevalue

4

所有的答案解释了什么是三元操作符,他们都是正确的,但每个人都没有注意到房间里的大象。为什么不删除三元运算符和上面写的

if (!obstacles) 
{ 
    // Enter the if with obstacles = false, but execute the code for true then flip obstacles 
    transform.renderer.material.color = new Color(.5f, .5f, 0.0f); 
    obstacles = true; 
} 

else 
{ 
    // Enter the else with obstacles = true, but execute the code for false then flip obstacles 
    transform.renderer.material.color = Color.white; 
    obstacles = false; 
} 
+1

为什么不简单'障碍=!障碍'? –

+0

@SimonWhitehead,因为我没有想到它:-)看到上面Silvermind的评论。 – Steve