或者,"在for循环中声明多个变量是禁止的"?
我的原始代码是
for( int i = 1, int i2 = 1;
i2 < mid;
i++, i2 = i * i ) {
Run Code Online (Sandbox Code Playgroud)
我想循环通过第一个这么多的正方形,并且想要数字和它的正方形,并且停止条件取决于正方形.这段代码似乎是意图的最干净的表达,但它无效.我可以想到十几种解决这个问题的方法,所以我不是在寻找最好的选择,而是为了更深入地理解为什么这是无效的.一点语言律师,如果你愿意的话.
我已经足够记住你必须在函数开始时声明所有变量,所以我很感激
for( int i = 0; ....
Run Code Online (Sandbox Code Playgroud)
句法.阅读它看起来好像你只能在for()语句的第一部分中有一个类型声明.所以你可以做到
for( int i=0, j=0; ...
Run Code Online (Sandbox Code Playgroud)
甚至略有巴洛克风格
for( int i=0, *j=&i; ...
Run Code Online (Sandbox Code Playgroud)
但不是我明智的
for( int i=0, double x=0.0; ...
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么?这是for()的限制吗?或者对逗号列表的限制,比如"逗号列表的第一个元素可以声明一个类型,但不能声明另一个?"下面使用逗号来区分C++的不同语法元素吗?
(一个)
for( int i=0, j=0; ...
Run Code Online (Sandbox Code Playgroud)
(B)
int i = 0, j = 0;
Run Code Online (Sandbox Code Playgroud)
(C)
int z;
z = 1, 3, 4;
Run Code Online (Sandbox Code Playgroud)
那里有专家吗?
根据我得到的好反应,我想我可以提出这个问题:
在for语句中
for( X; Y; …Run Code Online (Sandbox Code Playgroud) [这个问题是由"真实世界Haskell"中的第9章推动的]
这是一个简单的功能(减少到必需品):
saferOpenFile path = handle (\_ -> return Nothing) $ do
h <- openFile path ReadMode
return (Just h)
Run Code Online (Sandbox Code Playgroud)
我为什么需要那个$?
如果要处理的第二个参数不是do块,我不需要它.以下工作正常:
handle (\_ -> putStrLn "Error calculating result") (print x)
Run Code Online (Sandbox Code Playgroud)
当我尝试删除$编译失败.如果我明确添加parens,我可以让它工作,即
saferOpenFile path = handle (\_ -> return Nothing) (do
h <- openFile path ReadMode
return (Just h))
Run Code Online (Sandbox Code Playgroud)
我可以理解这一点,但我想我希望当Haskell击中do它时应该想到"我正在开始阻止",我们不应该明确地把它放在$那里来解决问题.
我还想过将do块推到下一行,如下所示:
saferOpenFile path = handle (\_ -> return Nothing)
do
h <- openFile path ReadMode
return (Just h)
Run Code Online (Sandbox Code Playgroud)
但是如果没有parens也行不通.这让我感到困惑,因为以下工作:
add a b …Run Code Online (Sandbox Code Playgroud)