scala - 像 3600 * 24 这样的表达式是在编译时评估的吗?
问题描述
在 Scala 中,假设我写
val oneDay = 3600L * 24 // seconds in one day
val twoDay = oneDay * 2 // seconds in two days
oneDay
(ie, )的最终值是86400
在运行时还是编译时计算的?
的最终值twoDay
呢?
解决方案
为了确定最终值,我尝试使用以下方法编译您的代码:
scalac main.scala -Xprint:all
而且,在最后阶段,您的代码变为:
final <synthetic> def delayedEndpoint$Main$1: Unit = {
Main.this.oneDay = 86400L;
Main.this.twoDay = Main.this.oneDay().*(2);
()
};
因此,第一个值在编译时计算,而第二个值将在运行时计算。
使用 Scala 3.0,可以使用inline
(或final
如 @ghik 所述)来生成编译时计算的第二个值。
推荐阅读
- c# - KendoUI 下拉菜单
- javascript - 如何将 Redux 4.0 TypeScript 绑定与 redux-thunk 一起使用
- html - 如何使用scrapy抓取本地htm文件?
- .htaccess - Symfony3 强制 https 全部生成错误无限循环
- firebase - Firestore - 限制来自一个域的请求
- python - 如何向 discord.py 命令添加参数?
- eclipse - Eclipse 氧气上缺少静态 Web 项目
- c# - 如何在 Unity 的 Roll-a-Ball 教程中在 Android 中获得等效的用户输入?
- javascript - 使用 Squeezebox 投资组合模板获取在新窗口中打开的链接
- elixir - 我应该如何管理插入相关表