Coding style 是否有任何语言具有while-else流结构?
考虑一下我经常使用的这个流结构:Coding style 是否有任何语言具有while-else流结构?,coding-style,Coding Style,考虑一下我经常使用的这个流结构: if ( hasPosts() ) { while ( hasPosts() ) { displayNextPost(); } } else { displayNoPostsContent(); } 是否有任何编程语言为while提供了可选的else子句,如果从未进入while循环,则将运行该子句?因此,上述代码将变为: while ( hasPosts() ) { displayNextPost(); } el
if ( hasPosts() ) {
while ( hasPosts() ) {
displayNextPost();
}
} else {
displayNoPostsContent();
}
是否有任何编程语言为while
提供了可选的else
子句,如果从未进入while循环,则将运行该子句?因此,上述代码将变为:
while ( hasPosts() ) {
displayNextPost();
} else {
displayNoPostsContent();
}
我发现有趣的是,许多语言都有do-while
构造(在检查条件之前运行一次while代码),但我从未见过while-else
被处理。基于在N-1块中运行的代码,例如try-catch
构造,运行N块代码有先例
我不确定是在这里发布还是在programmers.SE上发布。如果这个问题在那里更合适,那么请提出它。谢谢。Python在
while
和for
上有else
子句,但它们只有在循环从未被break
,return
等打破时才会运行。一些语言具有宏特性,可以让您定义这些东西。在C、C++、Common Lisp中,你可以定义这样的宏。 这是深奥的。标准的公共Lisp不提供它。但是我们在一个叫做
CommonLisp具有非常奇特的控制结构。有一个名为ITERATE的库,它类似于Common Lisp的循环
宏,但具有更多的特性和更多的括号
例如:
(iterate (while (has-posts-p))
(display-next-post)
(else (display-no-posts-content)))
(defparameter *posts* '(1 2 3 4))
(defun has-posts-p ()
*posts*)
(defun display-next-post ()
(print (pop *posts*)))
(defun display-no-posts-content ()
(write-line "no-posts"))
(defun test ()
(iterate (while (has-posts-p))
(display-next-post)
(else (display-no-posts-content))))
这正是你想要的。当while子句从不为true时,else子句只运行一次
例如:
(iterate (while (has-posts-p))
(display-next-post)
(else (display-no-posts-content)))
(defparameter *posts* '(1 2 3 4))
(defun has-posts-p ()
*posts*)
(defun display-next-post ()
(print (pop *posts*)))
(defun display-no-posts-content ()
(write-line "no-posts"))
(defun test ()
(iterate (while (has-posts-p))
(display-next-post)
(else (display-no-posts-content))))
有一些帖子:
没有员额:
我并不特别喜欢Common Lisp的循环宏,但它可以用 (循环while(has-posts-p)do(显示下一篇文章)finally(返回(显示无文章内容)))
如果您不关心值,则无需返回。Ooh我希望有人演示如何在Scala中实现这样的构造这是针对Pythontanks的,这看起来很接近我们将要介绍的功能。不,这是不同的。始终执行
FINALLY
子句。需要的是一个子句,该子句仅在循环
主体未运行时运行<代码>循环没有这样的功能。