我有一个矢量列表.但现在我想使用sortBy函数按照它们的长度对这个向量列表进行排序.我已经是:
import Data.List
vectorLength::(Int,Int)->Float
vectorLength(x,y) = sqrt(fromIntegral ((x^2)+(y^2)))
sortVectors::[(Int, Int)]->[(Int, Int)]
sortVectors list = sortBy(map vectorLength list) list
main = do
print(map vectorLength [(1,4), (2,6), (-2, -8), (3, -4)])
print(sortVectors[(1,4), (2,6), (-2,-8), (3, -4)])
Run Code Online (Sandbox Code Playgroud)
vectorLength函数确实有效.
map vectorLength [(1,4), (2,6), (-2,-8),(3,-4)]
output: [4.1231055, 6.3245554, 8.246211, 5.0]
Run Code Online (Sandbox Code Playgroud)
我想在调用以下函数时
sortVectors [(1,4), (2,6), (-2,-8), (3,-4)]
output: [(-2,-8), (2,6), (3,-4), (1,4)]
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
Couldn't match expected type `(Int, Int)' with actual type `[a0]'
Expected type: (Int, Int) -> (Int, Int) -> Ordering
Actual type: [a0] -> …Run Code Online (Sandbox Code Playgroud) 我有一个产品ID列表,我希望通过hibernate查询从我的数据库中获取所有产品.我怎样才能做到这一点?
List<Integer> list = custumor.getCart();
Query query = query("select product from Product product where product.id =: list");
Run Code Online (Sandbox Code Playgroud)
我知道这不是解决这个问题的最佳方法,但我只想知道如何测试列表中的所有值.
我创建了一个相机类.可以用我的鼠标旋转360度并上下移动.正如我的意图,就像在所有游戏中一样.也可以像所有游戏一样前进和后退.但我不知道如何实现向左和向右移动.
我做以下事情:
每帧调用一次:
gluLookAt(_posX , _posY , _posZ,
_viewX, _viewY, _viewZ,
_upX, _upY, _upZ );
Run Code Online (Sandbox Code Playgroud)
我的移动功能
不起作用:
void Camera::moveLeft()
{
float rot= (_viewY / 180 * PI);
_moveX -= float(cos(rot)) * 0.5;
_moveZ -= float(sin(rot)) * 0.5;
}
Run Code Online (Sandbox Code Playgroud)
工作是否
在场景中向前移动:
void Camera::moveForward()
{
float viewX = _viewX - _posX;
float viewY = _viewY - _posY;
float viewZ = _viewZ - _posZ;
_posX += viewX * speed
_posY += viewY * speed;
_posZ += viewZ * speed;
_viewX += viewX * …Run Code Online (Sandbox Code Playgroud) 我有一个自定义QGraphicsView和一个自定义QGraphicsItem.如果我点击该项目,我希望项目处理我的点击,否则我希望点击由视图处理.
但是当我点击该项目时,该项目处理点击.还行吧.但是,如果我点击其他地方,则根本不会处理点击.我的类中与mouseEvents有关的所有代码如下.
class CustomView : public QGraphicsView
{
Q_OBJECT
public:
void mousePressEvent(QGraphicsSceneMouseEvent *event);
};
void CustomView::mousePressEvent(QGraphicsSceneMouseEvent *event){
cout << "pressing in view";
}
class CustomItem : public QGraphicsItem
{
public:
CustomItem(CustomView* widget)
void mousePressEvent(QGraphicsSceneMouseEvent *event);
};
CustomItem::CustomItem(CustomView* widget){
setFlag(ItemIsSelectable);
setFlag(ItemIsMovable);
}
void CustomItem::mousePressEvent(QGraphicsSceneMouseEvent *event){
cout << "pressing in item";
}
Run Code Online (Sandbox Code Playgroud)
似乎当我从CustomItem类中删除mousePressEvent函数并在CustomView中将mousePressEvent函数更改为:
void CustomView::mousePressEvent(QMouseEvent *event){
cout << "pressing in view";
}
Run Code Online (Sandbox Code Playgroud)
CustomView处理所有mouseEvents.
如何让CustomItem处理项目中的点击,而CustomView处理所有其他点击?
谢谢.
编辑
所以现在我把它改成了:
class CustomView : public QGraphicsView
{
Q_OBJECT
public:
};
class CustomScene : public QGraphicsScene
{ …Run Code Online (Sandbox Code Playgroud) 在下面的伪代码中,我有一个poll()在主线程中永远调用的函数.如果我在没有sleep()声明的情况下执行此操作,则poll()每分钟只有2-3个项目被另一个线程添加到队列中.这是否意味着轮询会阻止该put()声明?
我怎么解决这个问题?
public class Test extends Thread{
private LinkedBlockingQueue<Object> queue = null;
Test(){
queue = new LinkedBlockingQueue<Object>(10);
}
public void run(){
// Do stuff, get incoming object from network
queue.put(o);
}
public Object poll(){
Object o = queue.poll();
sleep(1000);
return o;
}
}
Run Code Online (Sandbox Code Playgroud) java ×2
camera ×1
database ×1
haskell ×1
hibernate ×1
mouseevent ×1
mousepress ×1
opengl ×1
qt ×1
sql ×1