- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
struct Foo bar::Int -6ren">
比如前面这个:
@static if v"0.2" <= VERSION < v"0.3-"
# do something specific to 0.2 release series
end
@static 有必要吗?
最佳答案
除了@DVNold 的回答,这里还有更多解释......
一、两者的区别:
if
在全局范围内,条件和选择的任何分支都会在运行该代码时进行评估;@static if
在解析代码时(在宏扩展期间)评估条件,并替换为条件选择的任何分支的代码 - 没有留下 if
宏观扩张后。在顶级全局范围内,这两者之间没有太大区别,因为评估只发生一次,在代码被解析、宏扩展和降低之后。但是,在某些情况下,您无法在句法上放置 if
表达式。一个很好的例子是,如果您希望结构中某个字段的存在或不存在以某些条件为条件:
have_baz_field = rand(Bool)
struct Foo
bar::Int
@static if have_baz_field
baz::Int
end
end
下面是这段代码的两个不同的评估:
julia> have_baz_field = rand(Bool)
false
julia> struct Foo
bar::Int
@static if have_baz_field
baz::Int
end
end
julia> fieldnames(Foo)
(:bar,)
julia> have_baz_field = rand(Bool)
true
julia> struct Foo
bar::Int
@static if have_baz_field
baz::Int
end
end
julia> fieldnames(Foo)
(:bar, :baz)
当然,随机有或没有字段不是很有用;在实践中,您希望有一个更有意义的条件来决定是否拥有该字段,可能是基于您在尝试匹配 C 结构的布局时所在的平台。
在本地范围内,if
和@static if
之间有更多区别,因为代码可以被计算多次,而它只被解析一次。由于条件是在表达式出现的全局范围内在解析时求值的,@static if
形式无法访问任何局部变量,因为在扩展宏时它们不存在。另一方面,如果非静态 if 的条件仅基于全局常量,编译器很有可能可以预测条件的值,因此仍然可能没有任何有效差异,因为编译器将消除无论如何,除了已采取的分支之外的所有代码。然而,如果你想确保这发生在解析/编译时,那么你可以使用 @static if
来强制它。
希望这能澄清差异。简而言之,您很少需要 @static if
,因为它通常在顶级范围内甚至在本地范围内都是等效的,在您可以使用 @static if
的情况下,编译器将反正可能已经做了同样的事情。在某些情况下,在全局范围内需要 @static if
,因为分支在语法上是不允许的。在本地范围内,通常没有必要,但可能希望真正确保在运行时不评估条件。在大多数代码中,您不需要 @static if
。例如,在问题中给出的示例中,我个人只使用 if
并省略 @static
因为表达式出现在顶层并且仅评估条件一次。
关于julia - 是否有理由将 @static 放在 if VERSION 语句之前?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65720502/
您好,我希望我的下一个输出(在本例中就是字母)在上一个输出之后输出 8 个空格。这适用于第一个字符,但之后的 printf 语句不起作用。它在第一个 printf 语句之后立即打印,我试图将其设置为
我想知道制作 std::list<>::splice 背后的基本原理是什么使引用被拼接到新容器中的子序列的迭代器无效。这对我来说有点不合逻辑,尤其是考虑到标准 std::container::swap
谁能告诉我为什么我应该使用 Azure Function 输出绑定(bind)(例如 SendGrid 或 Twilio)而不是仅仅在我的 C# 函数中显式使用适当的 SDK(例如 Sendgrid
我们在当前项目中使用 React 和 TypeScript,我遇到了以下行为。 import React, { Component } from 'react'; 我将上面的行替换为下面的行,因为它似
我是一名优秀的程序员,十分优秀!