小编ove*_*nd1的帖子

如何解决Google Closure命名空间地狱?

我的新工作是使用Google Closure库编写面向组件的JavaScript.我喜欢活动,组件,服务和模块.但由于需要编写混乱使用命名空间的代码,因此工作非常苛刻.以下代码是典型的:

goog.provide(com.bin.slash.dot.closure.widget.SuperForm);

goog.require(com.bin.slash.dot.closure.widget.Avatar);
// ... ten require calls more...

com.bin.slash.dot.closure.widget.SuperForm = function() {
  goog.base(this);
  this._internal = new com.bin.slash.dot.closure.widget.Avatar(
    com.bin.slash.dot.closure.widget.Avatar.SRC_PATH);
};
Run Code Online (Sandbox Code Playgroud)

我无法相信这是真的.我并不害怕输入所有这些,但我只是觉得逻辑在这个符号地狱中消失了.扫描非常困难,因此需要更多时间来了解正在发生的事情.我的老板说,不鼓励写下以下快捷方式:

var SF = com.bin.slash.dot.closure.widget.SuperForm = function(){};
Run Code Online (Sandbox Code Playgroud)

因为所有这些都将在编译后绑定到全局命名空间(窗口),因此它们可能会干扰其他内容.

问题是如何避免这个符号地狱?

更新:我改进了我的开发人员流程,解决了地狱的问题.现在我编写了甜蜜的JavaScript,然后由Grunt使用sweet.js宏自动编译:

// For each file I define three macros which are replaced 
// in the compile time with hell of a long paths.
macro dir { rule { $x } => { my.very.very.long.namespace $x } }
macro class { rule { $x } => { dir.NameOfMyClass $x } }
macro …
Run Code Online (Sandbox Code Playgroud)

javascript google-closure-library

3
推荐指数
1
解决办法
2609
查看次数

Java ZonedDateTime.format 问题

运行到ZonedDateTime格式化的问题。它将 2020 年 12 月的结束日期格式化为 2021 年的日期。Java 片段

ZonedDateTime z1 = ZonedDateTime.of(LocalDateTime.of(2020, 12, 31, 0, 0), ZoneId.of("America/New_York"));
z1.format(DateTimeFormatter.ofPattern("YYYY-MM-dd"))
// yields "2021-12-31"
Run Code Online (Sandbox Code Playgroud)

12 月 28 日、29 日、30 日也是如此。不同时区的结果相同。重复 2019 年 12 月 30 日(格式为 2020-12-30)。

原始 Clojure 片段

(let [zdt (ZonedDateTime/of (LocalDateTime/of 2020 12 31 0 0) (ZoneId/of "America/New_York"))
      f (DateTimeFormatter/ofPattern "YYYY-MM-dd")]
  (.format zdt f))
; => "2021-12-31"
Run Code Online (Sandbox Code Playgroud)

我能够重现:

  • MacOS HotSpot Java 10(Java 版本“10.0.2”2018-07-17)
  • OpenJDK 版本“11.0.9.1” 2020-11-04

如果您对 Lisps 没问题 – 您可以在此处的云 REPL 中亲自查看

java zoneddatetime datetimeformatter

0
推荐指数
1
解决办法
116
查看次数