我最近(实际上仅在SO上)遇到了C/C++逗号运算符的使用.据我所知,它在左侧和右侧操作符之间的线上创建了一个序列点,以便您具有可预测(定义)的评估顺序.
我有点困惑为什么会在语言中提供这个,因为它似乎是一个可以应用于首先不起作用的代码的补丁.我发现很难想象它可以被使用的地方不是太复杂(并且需要重构).
有人可以解释这种语言功能的目的,以及它可以在实际代码中使用的位置(在合理范围内),如果有的话?
我试图评估以下制表符缩进的字符串:
'''for index in range(10):
os.system("echo " + str(index) + "")
'''
Run Code Online (Sandbox Code Playgroud)
我明白了,"有一个错误:语法无效,第1行"
有什么抱怨的?我是否需要缩进以匹配eval()语句,或将其写入字符串文件或临时文件并执行该操作或其他内容?
谢谢,
我收到了错误
Warning: printf() [function.printf]: Too few arguments
Run Code Online (Sandbox Code Playgroud)
看看我看到的代码:
function twentyten_posted_on() {
printf(
sprintf( '<a href="%1$s" title="%2$s" rel="bookmark"><span class="entry-date">%3$s</span></a>',
get_permalink(),
esc_attr( get_the_time() ),
get_the_date()
)
);
}
Run Code Online (Sandbox Code Playgroud)
什么似乎是问题?
我找不到解决此问题的文档。(也许我只是不擅长使用谷歌......)我的猜测是答案是否定的,但是我不明白文档中在哪里解决了这个问题。准确地说,我的问题如下。
假设,我想执行这样的事情:
DirectoryInfo someDir = new DirectoryInfo(@".\someDir");
Console.WriteLine($"Would you like to delete the directory {someDir.FullName}?");
string response = Console.ReadLine().ToLower();
response switch
{
"yes" => { someDir.Delete(); ... MoreActions},
_ => DoNothing()
};
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过使用常规 switch 或 if/else 来实现所需的行为,但是我很好奇在这种情况下是否可以使用 switch 表达式。
使用时std::weak_ptr,最佳实践是使用std::shared_ptr该lock()方法访问相应的内容,如下所示:
std::weak_ptr<std::string> w;
std::shared_ptr<std::string> s = std::make_shared<std::string>("test");
w = s;
if (auto p = w.lock())
std::cout << *p << "\n";
else
std::cout << "Empty";
Run Code Online (Sandbox Code Playgroud)
如果我想使用三元运算符来简写它,则似乎是这样的:
std::cout << (auto p = w.lock()) ? *p : "Empty";
Run Code Online (Sandbox Code Playgroud)
将是有效的代码,但这不能编译。
是否可以将这种方法与三元运算符一起使用?
为什么有些语言会区分返回值的方法和不返回值的方法?
即在Oracle的PL/SQL中,函数和过程之间的主要区别在于函数必须返回一个值,而过程不能.
同样对于那些没有的语言,为什么不呢?
编辑:我发现了一个相关的问题,人们可能会对阅读这个问题感兴趣:
我试图彻底理解一个陈述和一个表达之间的区别
但是我发现它甚至在阅读了这个答案之后就会感到困惑.
表达式和声明
请看下面的内容:
std::cout << "Hello there? " ;
Run Code Online (Sandbox Code Playgroud)
我可以说它是一个声明,因为它以分号结尾但我也可以说它
是一个表达式,因为我有一个ostream,一个输出运算符和一个字符串文字
,这个表达式产生的值是左手操作数.
哪一个是正确的?
我尝试编译:
const value = "20"
const x : string | never = "10" === value ? throw Error("bad things") : "hello"
Run Code Online (Sandbox Code Playgroud)
...并在throw- 上出错expression expected。我可以使用就地调用的内联方法解决这个问题,但这看起来不太好。( (() => {throw Error("bad things"})())
为什么不能放入三元运算符的分支?或者是否有另一种有效的语法,也许是我缺少的编译选项?
在变通方法 ( (() => throw Error("bad things")()) 中,如果函数体中没有大括号,Throw 似乎也不起作用。
在 C# 11 中,我们现在可以在内插字符串中包含换行符。所以我们可以写这样的代码:
string pageTitle = "";
string header = $"Header: {
pageTitle switch
{
"" => "No title",
_ => pageTitle
}}";
Run Code Online (Sandbox Code Playgroud)
除了 switch 语句之外,有没有办法在这里编写其他代码?
我尝试了一个if,它告诉我这if是一个无效的表达术语。
string header51 = $"Header: {
if (pageTitle5 == "")
{
"No title";
}
else
{
pageTitle5;
}
}";
Run Code Online (Sandbox Code Playgroud)
除了 switch 之外还有其他语句可以在这里使用吗?
c++ ×3
c ×2
c# ×2
c#-11.0 ×1
c#-8.0 ×1
eval ×1
exception ×1
expression ×1
operators ×1
php ×1
python ×1
python-3.x ×1
syntax ×1
typescript ×1