有Java背景,但从未为Web客户端开发(即脚本由浏览器运行),但java applet(我怀疑是mmm,老式(对吧?)或者其他我会清楚地使用它们对于以下某些情况)
然后考虑以下场景:
如果我错了,请纠正我.
在java中编写多线程Internet服务器时,主线程启动新线程以并行处理传入请求.
如果主线程不等待(带.join()
)它们会有什么问题吗?(显然荒谬的是创建一个新线程然后等待它).
我知道,在实际情况下,您应该(或"必须"?)实现一个线程池,以便在它们空闲时"重新使用"它们以获取新请求.
但是对于小型应用程序,我们应该使用一个线程池吗?
可能重复:
浮点不准确示例
在我的电脑和使用g ++我发现:
21*3.6 == 75.60000000000000852651
Run Code Online (Sandbox Code Playgroud)
这破坏了一个简单的循环.看到这段代码:
double incr=3.6;
double limit=21*3.6;
printf (" ¿%f == %.20f? \n", limit, limit);
for (double x=0.0; x<limit; x += incr) {
printf (" x %f < limit %f (dif = %.20f) \n", x, limit, limit-x);
}
Run Code Online (Sandbox Code Playgroud)
及其输出:
¿75.600000 == 75.60000000000000852651? x=0.000000, limit=75.600000 (dif = 75.60000000000000852651) x=3.600000, limit=75.600000 (dif = 72.00000000000001421085) x=7.200000, limit=75.600000 (dif = 68.40000000000000568434) x=10.800000, limit=75.600000 (dif = 64.80000000000001136868) x=14.400000, limit=75.600000 (dif = 61.20000000000000994760) x=18.000000, limit=75.600000 (dif = 57.60000000000000852651) x=21.600000, limit=75.600000 (dif …
让我们假设我们有这个承诺的历史:
c0 <- c1 <- c2 <- c3 <- c4 (master)
Run Code Online (Sandbox Code Playgroud)
我怎么能得到这个?
c0 <- c1 <- c2 <- c3 <- c4 (master)
^
|- c21 <- c22 (test)
Run Code Online (Sandbox Code Playgroud)
这是,保持完成工作,但从过去的点开始一个新的分支.
谢谢
我再次请求关于如何在Haskell中实现给定设计的评论.在此先感谢所有提供有用评论的人.此外,我希望这可以帮助像我这样的其他Haskell新手,有一个实用的示例代码.
这一次,我们有一个多态函数doSampling
(在模块Samples中),它接受泛型函数f和一个实数(索引)列表并返回一个Samples
(索引,值= f(索引)).我们doSampling
只需要实现一次,因为如果f是a Polynomial
或a 则无关紧要Sinus
.为此,我们引入了一个接口函数,并使用Polynomial和Sinus类型实现它.以下是正在实施的设计:
关于Function
接口(Haskell中的类)存在争议.有人建议它实际上并不是必需的,因为doSampling
可能会采用"裸体"功能(Double -> Double)
.但是,如何做到这一点,如果你需要的裸体函数内一些额外的状态多项式,功放+频率+相对于窦(coeffs?
kosmikus和Chris Taylor非常好的答案.谢谢.两者中的一个关键想法:有
doSampling :: (Double -> Double) -> [Double] -> Samples
这是:它需要一个函数(Double -> Double)
(而不是Function
)并列出并返回样本.
我的目的是保持Polynomial
s和Sinus
es 的状态.在克里斯的答案中没有考虑到这一点,但它在kosmikus中.另一方面,Function
如果您无法访问源代码,kosmikus版本中的弱点可能是如何扩展其定义.
我还要指出:
克里斯的想法是(Double -> Double)
通过工厂函数将多项式或正弦曲线封装到函数中,mkPolynomial
或者mkSinus
生成(使用currying?)获取适当参数的所需函数.(虽然你以后不能参考参数).
kosmikous'使用value
转换(也使用currying?)a 的想法Function
a(Double -> Double)
这两个答案都值得一读,因为他们有其他一些小的Haskell技巧来减少和简化代码.
克里斯的答案不支持保持多项式或窦的状态
kosmikus答案是不可扩展的:添加新类型的函数(Cosinus …
以下是使用泛型的访问者模式的java实现,一般是否有用?(我想是的).
它能以某种方式得到改善吗?使用匿名类轻松调用很重要.谢谢.
(使用示例):
Vector<Number> numbers = new Vector<Number>();
numbers.add(new Double(1.2));
numbers.add(new Float(-1.2));
numbers.add(new Double(4.8));
numbers.add(new Float(-3.4));
numbers.add(new Long(123456));
numbers.add(new Short("14"));
For.each(numbers, new Visitor<Number>() {
public void doIt(Double n) {
System.out.println("doIt() for double: " + n);
}
public void doIt(Float n) {
System.out.println("doIt() for float: " + n);
}
public void doIt(Number n) {
System.out.println("doIt() for Number: " + n);
}
});
Visitor<Number> visi = new Visitor<Number>() {
private StringBuffer all = new StringBuffer ();
public void doIt(Number n) {
System.out.println("doIt() …
Run Code Online (Sandbox Code Playgroud)