我正在尝试将JDK中的类链接到scaladoc生成的doc中.我使用了-doc-external-docscaladoc 2.10.1 的选项,但没有成功.
我正在使用-doc-external-doc:/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/rt.jar#http://docs.oracle.com/javase/7/docs/api/,但我得到的链接index.html#java.io.File不是index.html?java/io/File.html.似乎此选项仅适用于scaladoc生成的doc.
我是否错过了scaladoc中的选项,还是应该填写功能请求?
我已经配置sbt如下:
scalacOptions in (Compile,doc) += "-doc-external-doc:/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/rt.jar#http://docs.oracle.com/javase/7/docs/api"
Run Code Online (Sandbox Code Playgroud)
注意:我Opts.doc.externalAPI在即将到来的sbt 0.13中看到过util.我认为一个很好的补充(不确定是否可能)将是传递ModuleID而不是File.util会找出哪个文件对应于ModuleID.
只是想知道这个名字来自哪里,eta?
我所知道的关于eta的两件事是:
我相信我通过识别哪些字段应该是散列/相等测试的一部分来阅读在编译期间(使用APT)生成equals/hashcode/toString方法的人.我在网上找不到那样的东西(我可能梦见过它?)......
这可以这样做:
public class Person {
@Id @GeneratedValue private Integer id;
@Identity private String firstName, lastName;
@Identity private Date dateOfBirth;
//...
}
Run Code Online (Sandbox Code Playgroud)
对于一个实体(所以我们想要排除一些字段,比如id).
或者像scala案例类,即值对象:
@ValueObject
public class Color {
private int red, green, blue;
}
Run Code Online (Sandbox Code Playgroud)
不仅文件变得更易读和更容易编写,而且它还有助于确保所有属性都是equals/hashcode的一部分(如果您稍后添加其他属性,而不相应地更新方法).
我听说APT在IDE中得不到很好的支持,但我不认为这是一个主要问题.毕竟,测试主要由持续集成服务器运行.
有没有想过这是否已经完成,如果不是为什么?谢谢
我在scala论坛上看到了这篇文章.
这是一个回顾:
我刚刚意识到Scala编译器似乎没有在通配符上"延续"类型边界:
scala> class Foo { def foo = 42 }
defined class Foo
scala> class Bar[A <: Foo](val a: A)
defined class Bar
scala> def bar(x: Bar[_]) = x.a.foo
:7: error: value foo is not a member of Any
Run Code Online (Sandbox Code Playgroud)
我希望方法栏的参数仍然是Foo的上限,即使它的确切类型参数在方法中不重要.这种行为有特定的原因吗?
然后讨论进入Spec解释争议:)
最后海报提出了这样的解释:
但是,如果编译器为Bar [_]执行此操作,出于一致性原因,它也必须为Bar [A]执行此操作.然而,后者会产生一些奇怪的后果.def bar [A](x:Bar [A],y:Bob [A])例如突然必须携带Bob的隐式类型绑定.如果鲍勃有自己的类型限制,那将是非常混乱的.
我不明白,因为
def bar[A](x: Bar[A])
Run Code Online (Sandbox Code Playgroud)
因为Bar类型参数是有界的,所以不会单独编译.
无论如何,我相信以下将是完全有道理的:
def bar(x: Bar[_], y : Bob[_])
Run Code Online (Sandbox Code Playgroud)
作为一种解决方法,他们建议:
def bar(x: Bar[_ <: Foo]) = x.a.foo
Run Code Online (Sandbox Code Playgroud)
除了不干燥之外,它会让事情变得困难:
让我们考虑一棵树
abstract class Tree[T …Run Code Online (Sandbox Code Playgroud) 测试运行时行为已有很好的文档记录,但随着强大的类型系统和宏系统的出现,人们可能会对测试编译时行为感兴趣.
例如,在编写提供编译时保证的库时.假设我正在构建一组测试匹配器,并且我想确保匹配器类型安全,就像我声称的那样.
List(1,2) must beEqualTo(Set(1,2)) // should fail at compile-time
Run Code Online (Sandbox Code Playgroud)
我可以在scala编译器项目中看到,大多数测试都是功能测试,其中编译器输出通过将其与参考文件进行比较来断言.这样的测试是否有约定?一个SBT插件?
谢谢
Java 8 支持类型参数的注解,例如
class SomeBean {
Optional<@Base64 String> bs;
}
Run Code Online (Sandbox Code Playgroud)
这如何用 Scala 编写(如果可能)?我已经尝试了以下(编译),但生成的字节码没有提到Base64注释:
case class SomeScalaBean(bs: Optional[String @Base64])
Run Code Online (Sandbox Code Playgroud)
注意:如果您想知道,hibernate 验证器正在使用它,请参阅http://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#type-arguments-constraints
编辑:我为此创建了一张票 - https://issues.scala-lang.org/browse/SI-9883
在猫有2个半群类型的类:Semigroup并SemigroupK与类型构造后者的工作.我没有看到后者优于前者的优势.如果我查看他们提供的列表实例Monoid(虽然有一个MonoidK),而是NonEmptyList提供一个SemigroupK.注意,NonEmptyList还提供了一个Semigroupvia以下方法:
implicit def catsDataSemigroupForNonEmptyList[A]: Semigroup[NonEmptyList[A]] =
SemigroupK[NonEmptyList].algebra[A]
Run Code Online (Sandbox Code Playgroud)
为什么会出现差异?
然后似乎大多数半群操作只能在Semigroup和不可用SemigroupK(有reduceK,Reducible但这是我看到的唯一一个,并且它代表reduce哪个工作Semigroup).
那么,给定一种类型T[_],你会因为同时拥有a SemigroupK[T] 和 a 而获得Semigroup[T[A]] for some A什么?
编辑
现在有一个问题需要删除MonoidK和SemigroupK:https://github.com/typelevel/cats/issues/1932
我最近安装了NixOS,最后得到了3个配置文件:bruno(用户配置文件),默认(由root使用)和系统(由NixOS使用)。
我发现为系统配置文件使用稳定通道和为我使用不稳定通道(bruno配置文件)很方便:
~> nix-channel --list
unstable https://nixos.org/channels/nixos-unstable
~> sudo nix-channel --list
nixos https://nixos.org/channels/nixos-17.09
Run Code Online (Sandbox Code Playgroud)
然后,我通过声明方式安装了一些软件包/etc/nixos/configuration.nix:
environment.systemPackages = with pkgs; [
firefox
chromium
htop
# ...
];
Run Code Online (Sandbox Code Playgroud)
还有一些命令式:nix-env --install firefox。
现在列出我已安装的软件包,我希望还会看到系统配置文件提供的软件包(因为它们在我的用户配置文件中可用):
~> htop --version
htop 2.0.2 - (C) 2004-2016 Hisham Muhammad
Released under the GNU GPL.
~> nix-env -q | grep htop
~> nix-env -q | grep firefox
firefox-57.0
Run Code Online (Sandbox Code Playgroud)
仅列出Firefox。让我们尝试使用根配置文件:
~> sudo nix-env -q | grep htop
Run Code Online (Sandbox Code Playgroud)
同样,它实际上是完全空的。也许使用系统配置文件:
~> sudo nix-env -p /nix/var/nix/profiles/system -q
Run Code Online (Sandbox Code Playgroud)
依然没有。
来自传统的软件包管理器(Debian,Red Hat),我感到困惑的是,将Nix定义为“纯功能软件包管理器”似乎没有提供普遍查询软件包的工具-整个手册中都提到了nix-env,感觉就像debian apt的另一自我。 …
我想将我的构建中包含的文件数量限制src为选定的几个。不允许将文件列表直接传递给src或srcs不允许作为存档或目录。我找不到执行此操作的函数,并且builtins.filterSource似乎对我不起作用(不知道为什么——包含过滤文件的中间派生结果为空):
files = [
./Cargo.toml
./Cargo.lock
./cpu.rs
];
src = builtins.filterSource (p: t: builtins.elem p files) ./.;
Run Code Online (Sandbox Code Playgroud)
注意:我正在使用rustPlatform构建器,但我认为这并不重要。
是否有一个 Scala 库可以帮助对写入标准输出的文本进行着色?
这个库应该利用 scala 字符串插值机制。
scala ×6
annotations ×2
java ×2
sbt ×2
apt ×1
equals ×1
hashcode ×1
java-8 ×1
nix ×1
nixos ×1
nixpkgs ×1
scala-cats ×1
scala-macros ×1
scaladoc ×1