我想有一个简单的解决方案来比较Java中的两个Instant对象.比较规则应基于日期而不是时间.
public boolean isAfterBasedOnDate(Instant instant, Instant compareTo) {
//TODO
}
Run Code Online (Sandbox Code Playgroud)
例如,
有没有简单的方法呢?
trait Foo
trait Bar extends Foo
def doStuff[T <: Foo](x: T)(implicit ev: T =!:= Foo) = x
doStuff(new Foo{}) //ambiguous implicit value
doStuff(new Bar)// successful
Run Code Online (Sandbox Code Playgroud)
隐式解决方案正在编译时发生,所以在这里我认为可能有两个隐式值具有完全相同的类型来触发模糊的东西.
现在,我将在团队中引入无形的,我的同事们认为这种含糊不清的暗示并不理想,我对此没有强烈的争论.这是实现它的唯一方法,以便在scala中使类型安全.如果是,我该怎么做才能自定义错误消息?
编辑:
在无形状中,我想使2 NAT的总和不等于7,我可以像这样编码使编译失败.
def typeSafeSum[T <: Nat, W <: Nat, R <: Nat](x: T, y: W)
(implicit sum: Sum.Aux[T, W, R], error: R =:!= _7) = x
typeSafeSum(_3, _4)
Run Code Online (Sandbox Code Playgroud)
但错误信息是含糊不清的隐含值,如何自定义错误信息?
我有这个代码一般将String转换为Dto,如果我使用Manifest和ClassTag,我可以使用方法runtimeClass来获取运行时类,但是TypeTag没有这个方法
class ObjectMapper[T] {
def readValue(x: String, t: Class[T]): T = ???
}
class Reader {
def read[W: Manifest](x: String): W = {
val mapper = new ObjectMapper[W]
mapper.readValue(x, implicitly[Manifest[W]].runtimeClass.asInstanceOf[Class[W]])
}
}
Run Code Online (Sandbox Code Playgroud)
我可以知道为什么TypeTag没有方法runtimeClass
提前谢谢了
我想知道如何在Finch中将RequestReader和Route绑定在一起.我没有找到一个完整的例子.
这个例子来自finch github,它运行正常.
import io.finch.route._
import com.twitter.finagle.Httpx
val api: Router[String] = get("hello") { "Hello, World!" }
Httpx.serve(":3000", api.toService)
Run Code Online (Sandbox Code Playgroud)
我明白这段代码将获得路径"hello"并将返回响应"hello world"
然后我想将RequestHeader绑定到它.
val doSomethingWithRequest: RequestReader[String] =
for {
foo <- param("foo")
bar <- param("bar")
} yield "u got me"
val api: Router[RequestReader[String]] = Get / "hello" /> doSomethingWithRequest
val server = Httpx.serve(":3000", api.toService)
Run Code Online (Sandbox Code Playgroud)
我认为这段代码意味着如果网址是" http:// localhost:3000/hello?foo = 3 ",它将返回"你找我"的回复.但是,响应状态为404.
我认为我对Route和RequestHeader之间的组合做错了.
也许有人可以帮助我这个,也就是说,分享一些关于这个芬奇的好文章会更好.该版本频繁出现,文档已过时https://finagle.github.io/blog/2014/12/10/rest-apis-with-finch/
目前的做法是将整个书单连接成书单组件。但是,仅通过更改状态中的几个字段来渲染巨大的组件并不是很有效。我不知道如何将每个 book 组件连接到每个单独的 Book state。
该项目正在使用redux。应用程序全局状态是这样的
{
"books": [
{
"field1": "field1",
"field2": "field2",
"field3": "field3",
} ...
]
}
Run Code Online (Sandbox Code Playgroud)
在 Book List 组件中,我们使用 react redux 将 list 与它连接起来
export default connect(state => ({
books: state.books
}))(BookListComponent);
Run Code Online (Sandbox Code Playgroud)
现在需求变了,书里的字段不会经常变了。问题是,如果更改了一个字段,它将更新整个 BookListComponent。这不是我期望的高性能组件。
我想将连接逻辑下推到单个 Book 组件以使用reselect
国家没有书的索引,我不知道如何编写connect来使它工作
export default connect(state => ({
books[index]: state.books[index]
}))(BookListComponent);
Run Code Online (Sandbox Code Playgroud)
感谢提前,欢迎所有选项
我有scalaz验证的这个实现,似乎隐含scalaz.Bind不在范围内,所以表达式不起作用.这是代码:
import scalaz._
import Scalaz._
case class User(name: String, knowScala: Boolean, age: Int)
object PublicValidationSpec extends BasicValidation {
def validate(user: User): Validation[String, String] = {
for {
b <- checkAge(user)
c <- checkName(user)
} yield s"Congrats, ${c.name}"
}
}
trait BasicValidation {
def checkName(user: User): Validation[String, User] = {
if(user.name == "") "must have a name".fail else user.success
}
def checkAge(user: User): Validation[String, User] = {
if(user.age < 3) "must be a valid age".fail else user.success
}
}
Run Code Online (Sandbox Code Playgroud)
例外是
Error:(14, …Run Code Online (Sandbox Code Playgroud) 据我所知,有两种方法可以添加类型约束.
trait Dummy
Run Code Online (Sandbox Code Playgroud)
第一种方式
def doStuff[T <: Dummy](x: T) = x
Run Code Online (Sandbox Code Playgroud)
第二种方式
def doStuff[T](x: T)(implicit x: T <:< Dummy) = x
Run Code Online (Sandbox Code Playgroud)
两者都达到了相同的效果.
我只是想知道我应该直接使用上限或下限的哪种场景,或者我应该使用implicit来在类型上附加约束.
def typeSafeSum[T <: Nat, W <: Nat, R <: Nat](x: T, y: W)
(implicit sum: Sum.Aux[T, W, R], error: R =:!= _7) = x
typeSafeSum(_3, _4) //compilation error, ambiguous implicit found.
Run Code Online (Sandbox Code Playgroud)
我不认为错误信息"模糊隐含发现"是友好的,我怎么能自定义它说"2 NAT值的总和不应该等于7"
提前谢谢了
我正在使用boot2docker.我在守护进程模式下运行一个映像,它在端口3000启动grunt服务器.这是我用来启动它的命令.
该图像已经暴露了端口3000
docker run -d -P --name dummy image_name grunt server
docker ps
3af4ba19c539 image_name:latest "grunt server" 54 minutes ago Up 54 minutes 0.0.0.0:45000->3000/tcp dummy
Run Code Online (Sandbox Code Playgroud)
然后进入同一容器"卷曲"Web服务器.
docker exec -it 3af4ba19c539 /bin/bash
curl localhost:3000
Run Code Online (Sandbox Code Playgroud)
它得到了HTML.
但是,当我尝试在我的mac pc中连接它时.它说"连接被拒绝了."
curl $(boot2docker ip):45000
//curl: (7) Failed connect to 192.168.59.103:45000; Connection refused
Run Code Online (Sandbox Code Playgroud)
我尝试使用VBoxManage来解决这个问题,但它也没有用
VBoxManage modifyvm "boot2docker-vm" --natpf1 "tcp-port45000,tcp,,45000,,45000"
Run Code Online (Sandbox Code Playgroud)
我可以知道如何解决这个问题.提前谢谢了
如果生产者端的确认延迟非常高,我们是否可以使用一些代理指标来监控 Kafka 代理。
我们正在使用 datadog 来监控生产者和 Kafka 代理端。可以看出生产者的ack滞后超过10秒。但是,在broker方面,我觉得只用message.in.rate,kafka.net.bytes_in.rate效率不高。最好我们可以在代理端有一些 LAG 指标来表明the broker is fully loaded to acknowledge back the producer.
此外,我们仅kafka.acks = 1用于分区领导。
我想知道是否有人对此有一些经验,欢迎提供任何建议。:) 提前致谢。
scala ×6
shapeless ×2
apache-kafka ×1
boot2docker ×1
docker ×1
finch ×1
implicit ×1
java ×1
monitoring ×1
react-redux ×1
reactjs ×1
redux ×1
reselect ×1
scalaz ×1
type-safety ×1
validation ×1