2011-10-08 54 views
0

我不知道如何“S”正在使用中“(+ S [1])”。什么是'+'?我也不明白||的用法这样的符号,它在做什么?如何翻译下面的JavaScript以C#?

var draw = function(s){ 
... 
if (+s[i]) a = (a+90)%360||360; // Right 
else a = (a-90||360); // Left 

在下面的代码中我不明白'while(n--)'是什么?

var getS = function(n){ 
    var s = ''; 
    while (n--) s += getNext(0); 
    return s; 
}; 

如果你想看看这个代码在上下文中去http://fractal.qfox.nl/,按F12,以获得开发工具并寻找在脚本dragon.js。如果您喜欢这个挑战,请感觉完全免费向C#发布完整的翻译。

回答

6

把+在表达的前胁迫它变成一个数,例如来自一个字符串。

的||如果运算符可以转换为真,则其左侧的值为其它值,否则为右侧。等等|| B,则意味着“使用,如果它不为空,假,零或空字符串,否则使用B”。

而且n--将布尔值false当n为零。

2

if (+s[i])正在检查如果s [I]存在,并且是一个数字!= 0。在C#这将是相同

int n; 
if (int.TryParse(s[i], out n) && n != 0) { } 

a = (a-90||360);基本上是说如果莱夫特赛德的||为空,未定义,假或零,然后采取权利。在C#中它会看起来像

a = (a-90 > 0)? a-90 : 360; 

a必须事先到该行声明。


while (n--){ }不断重演直到n为0 n必须先于运行代码虽然如var n = 10;声明。在C#中,它将是

int n = 10; 
while (n >= 0) 
{ 
    n--; 
} 
+0

“if(+ s [i])正在检查s [i]是否存在并且是一个数字”。并非如此。如果'[i]'为零,则它是一个数字,但它会因为零转换为假而失败。您的C#版本也会正确将零视为一个数字。 –

+0

我修改了代码。感谢指针。 – Christian