我刚刚使用我的大学电子邮件地址升级到免费的github微计划.我打算在本学期使用私有存储库进行一些类项目,但我想知道在我的免费学生升级到期后2年结束时这些存储库会发生什么.我假设当你从微账户降级到免费账户时会发生同样的事情.
我的存储库会消失,变成公共,还是变成只读?我搜索了一下,但未能找到答案.
我找到了一篇有趣的小博文,解释了如何使用行号在宏中生成(半)唯一名称:
// Do magic! Creates a unique name using the line number
#define LINE_NAME( prefix ) JOIN( prefix, __LINE__ )
#define JOIN( symbol1, symbol2 ) _DO_JOIN( symbol1, symbol2 )
#define _DO_JOIN( symbol1, symbol2 ) symbol1##symbol2
Run Code Online (Sandbox Code Playgroud)
这里有两件事让我很困惑:
LINE_NAME宏JOIN在文件中声明之后才会工作?我认为C预处理器执行了线性传递,因此需要根据依赖性来定义宏,就像C函数在使用之前需要定义一样.JOIN和_DO_JOIN宏来获得正确的结果?在宏中具有这种间接级别似乎很奇怪.我有一种感觉,这两个问题的答案是相关的,并且与C预处理器评估宏的方式有关.(但是,由于我甚至认为这个例子无效,我对宏如何工作的直觉显然已经过时了.)
我在REPL中玩耍,我有一些奇怪的行为:
Clojure 1.4.0
user=> (type {:a 1})
clojure.lang.PersistentArrayMap
user=> (def x {:a 1})
#'user/x
user=> (type x)
clojure.lang.PersistentHashMap
Run Code Online (Sandbox Code Playgroud)
我认为所有小的文字地图都是实例PersistentArrayMap,但显然情况并非如此def.为什么要使用defClojure为我的litte地图选择不同的表示?我知道这可能只是一些奇怪的实现细节,但我很好奇.
ANTLRWorks2中的TestDriver似乎有点挑剔,它什么时候会接受没有和明确的语法EOF,什么时候不接受.ANTLR4入门指南中的Hello语法不会在任何地方使用,因此我推断如果可能的话,最好避免显式.EOFEOF
使用的最佳做法是EOF什么?你什么时候需要它?
我想要想象一个代表一些地理地图的图表.因此,我的图形的边缘与罗盘(北,南,东,西)相关联.图表本身是定向的,可以是非循环的.
例如,我有节点:House-1,House-2,House-3有边[House-1,north-of,House-2],[House-2,east-of,House-3].
我正在寻找一种可以理解罗盘的布局算法(也许作为提示?)
我已经通过JUNG,JGraph,GraphViz,似乎没有人做我想要的但我可能错过了一些东西.
有什么建议?
我在Twitter的Effective Scala页面上阅读了关于Lazyness [原文如此] 的部分,其中包含了这个建议(重点是我的):
为此目的使用延迟字段[按需计算和缓存值],但在语义需要延迟时避免使用延迟.在这些情况下,最好是明确的,因为它使成本模型明确,并且可以更精确地控制副作用.
我不明白为什么他们会提出这个主张.为什么lazy在语义需要懒惰的情况下避免使用关键字会更好(这意味着它对于程序中的正确性是必要的,而不是仅仅将其用作优化).我没有看到如何编写自己的懒惰初始化代码会使得懒惰比使用lazy语言中内置的关键字更清晰!我知道有一些额外的开销涉及使lazy字段线程安全,但我不认为这是他们在这里得到的...
关于使用lazy我完全缺失的指南是否有一些隐藏的优点,或者我最好忽略这个建议?
这种行为对我没有意义:
user=> (type 1)
java.lang.Long
user=> (type (cast Long 1))
java.lang.Long
user=> (type 1)
java.lang.Long
user=> (type (Long. 1))
java.lang.Long
user=> (type (cast Long 1))
java.lang.Long
user=> (BigDecimal. 1)
1M
user=> (BigDecimal. (Long. 1))
CompilerException java.lang.IllegalArgumentException: More than one matching method found: java.math.BigDecimal, compiling:(NO_SOURCE_PATH:22)
user=> (BigDecimal. (cast Long 1))
1M
Run Code Online (Sandbox Code Playgroud)
为什么这个(BigDecimal. (Long. 1))案例无法找到明确的匹配方法签名,而另外两个表达式 - 具有完全相同的参数类型 - 成功?
我发现这种行为更奇怪的是它似乎特别适用于这种Long类型:
user=> (BigDecimal. (Long. 1))
CompilerException java.lang.IllegalArgumentException: More than one matching method found: java.math.BigDecimal, compiling:(NO_SOURCE_PATH:1)
user=> …Run Code Online (Sandbox Code Playgroud) 今天我遇到了一些问题,分配给var存储在地图中的案例类实例中的字段.这是repl演示问题的简单会话:
scala> case class X(var x: Int)
defined class X
scala> val m = Map('x -> X(1))
m: scala.collection.immutable.Map[Symbol,X] = Map('x -> X(1))
scala> m
res0: scala.collection.immutable.Map[Symbol,X] = Map('x -> X(1))
scala> m('x).x = 7
scala> m
res1: scala.collection.immutable.Map[Symbol,X] = Map('x -> X(1))
scala> val x = m('x)
x: X = X(1)
scala> x.x = 7
x.x: Int = 7
scala> x
res2: X = X(7)
scala> m
res3: scala.collection.immutable.Map[Symbol,X] = Map('x -> X(7))
scala> m('x).x_=(8)
scala> m …Run Code Online (Sandbox Code Playgroud) 以下在JDK8中编译得很好,但是与JDK7 给出了不兼容的类型错误.
List<List<? extends Number>> xs = Arrays.asList(Arrays.asList(0));
Run Code Online (Sandbox Code Playgroud)
根据这个答案,List<List<? extends Number>>没有超类型的关系List<List<Integer>>.
在Java 8中改变了什么使得这个任务有效?我也有一个很难理解为什么它不会在Java 7的工作.
这两个语句使用JDK7编译时没有类型错误:
List<? extends Number> xs = Arrays.asList(0);
List<? extends List<? extends Number>> ys = Arrays.asList(Arrays.asList(0));
Run Code Online (Sandbox Code Playgroud)
对我来说,这两个都在JDK7中工作似乎非常不直观,但上面的原始示例却没有.所有这些当然都适用于JDK8.我想要真正理解这里发生了什么,我需要理解为什么这些例子在Java 7中是合法的,但原始的例子却不是.