小编whe*_*ies的帖子

可以在Scala中编写类似于C++模板的泛型返回类型吗?

在C++中,我可以执行以下操作:

template<typename T, typename V>
struct{
    void operator()(T _1, V _2){
        _2.foo( _1 );
    }
};
Run Code Online (Sandbox Code Playgroud)

这让我随意决定使用任何有一些名为"foo"的方法的对象,它采用某种类型"T",而不事先指定"foo"函数的参数类型和所述函数的返回类型.

当我看到Scala时,看到像Function1这样的特征,并且正在使用像.这样的函数定义

def foo[T<:{def foo():Unit}]( arg:T ) = //something
def bar( x:{def foo():Unit} ) = //something
def baz[T,V<:Function1[T,_]]( x:T, y:V ) = y( x )
Run Code Online (Sandbox Code Playgroud)

我看着自己,想想为什么我不能做同样的事情?为什么"baz"会返回Any?它不能在编译时推断出实际的返回类型吗?如果我甚至不使用它,为什么我必须声明返回类型"foo"?

我希望能够做到

def biff[T,V:{def foo( x:T ):Unit}] = //something
Run Code Online (Sandbox Code Playgroud)

要么

def boff[T<:{def foo( x:Double ):_}]( y:T ) = y.foo _
Run Code Online (Sandbox Code Playgroud)

你能做到这一点,我只是错过了一些东西吗?如果没有,为什么不呢?

scala scala-2.8

5
推荐指数
2
解决办法
1747
查看次数

使用Drawable初始化SurfaceView

SurfaceView首次启动应用程序时,我想打开一个带有图标的图标放在屏幕中央.我正在唤起图标创建,使用一个实现SurfaceHolder.Callback来跟踪'Canvas'对象何时准备就绪.我的问题是有更好的方法吗?是否有不那么繁琐的方法来启动SurfaceView一些Drawables加载创建而不必诉诸于在回调对象中放置绘制逻辑?

这是我的代码供参考.首先绘制的对象:

public class CanvasDraw{
    protected final SurfaceHolder mHolder;
    protected final Drawable mDrawable;

    public interface DrawLogic{
        void draw(Rect _surface);
    }

    public CanvasDraw(SurfaceView _view, Drawable _drawable){
        mHolder = _view.getHolder();
        mDrawable = _drawable;
    }

    public void draw(DrawLogic _logic){
        Canvas canvas = null;
        try{
            canvas = mHolder.lockCanvas();
            if( canvas != null ){
                Log.i("DRAWABLE", "Drawing " + mDrawable.toString());
                _logic.draw( mHolder.getSurfaceFrame() );
                mDrawable.draw(canvas);
            }
            else{
                Log.i("DRAWABLE", "Canvas null valued");
            }
        }
        finally{
            if( canvas != null ){
                mHolder.unlockCanvasAndPost(canvas); …
Run Code Online (Sandbox Code Playgroud)

android surfaceview drawable

5
推荐指数
1
解决办法
2163
查看次数

使用Mokito模拟Akka Actor的日志对象

我已经尝试了一些似乎可以编译但在单元测试期间抛出NullPointer异常的东西,所以我想知道如何可能克服单元测试中的限制.我有一个看起来像这样的课:

class LogWriter extends Actor{
  def receive{
    case x:Timing => log.info(x toString)
    case x:Event => log.info(x toString)
    case x:Any => log.warning("Improper message sent to LogWriter, %s".format(x toString))
  }
}
Run Code Online (Sandbox Code Playgroud)

但是尝试使用Specs2和Mockito支持进行单元测试,其中包括以下内容:

class LogWriterSpec extends Mokito with Specification{
  val mockedLog = mock[Logger]

  class MockedLogWriter extends LogWriter{
    @transient override val log = mockedLog
  }

  val writer = actorOf(new MockedLogWriter).start

  def testTiming = {
    val message = Timing("testTiming", 15 seconds)
    writer !! (message, 400)
    there was one(mockedLog).info(message toString)
  }

  def is = "A LogWriter" …
Run Code Online (Sandbox Code Playgroud)

unit-testing scala mockito actor akka

5
推荐指数
1
解决办法
1158
查看次数

将元组列表映射到字典,python

我有一个从数据库中的表中提取的元组列表,它们看起来像(,,).key和foreignkeys之间有多对一的关系,我想将它转换为由foreignkey索引的dict,其中包含所有值与该外键的总和,即{ foreignkey,sumof ( value ) }.我写了一些相当冗长的东西:

myDict = {}
for item in myTupleList:
    if item[1] in myDict:
        myDict [ item[1] ] += item[2]
    else:
        myDict [ item[1] ] = item[2]
Run Code Online (Sandbox Code Playgroud)

但在看到这个问题的答案或者 两个问题之后,我必须更简洁地表达我想做的事情.如果这是重复,我错过了它,并将删除问题,如果你可以提供链接.

python dictionary tuples list

4
推荐指数
2
解决办法
8826
查看次数

Scala:将返回类型转换为自定义特征

我编写了一个扩展Iterator [A]的自定义特性,我希望能够使用我在另一个方法返回的迭代器[A]上编写的方法.这可能吗?

trait Increment[+A] extends Iterator[A]{
    def foo() = "something"
}

class Bar( source:BufferedSource){
    //this ain't working
    def getContents():Increment[+A] = source getLines
}
Run Code Online (Sandbox Code Playgroud)

我仍然试图绕过整个隐含的东西而不是在Bar对象定义中编写方法.我将如何以上述方式包装这样的物品?

scala implicit implicit-typing implicit-conversion

4
推荐指数
1
解决办法
815
查看次数

动态地向RelativeLayout添加内容

因为我还在学习Android(而且看起来亚马逊说我要花2个月才拿到Hello,Android书)我仍然在做着简单的事情.使用ImageView点击RelativeLayout上的按钮,即可显示图标.创建它的代码如下:

private int mIconIdCounter = 1;
private ImageView addIcon(){
    ImageView item = new ImageView(this);
    item.setImageResource( R.drawable.tiles );
    item.setAdjustViewBounds(true);
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT );
    if( mIconIdCounter != 1 ){
        params.addRule(RelativeLayout.RIGHT_OF, 1 );
    }
    item.setLayoutParams( params );
    item.setId( mIconIdCounter );
    ++m_IconIdCounter;
    return item;
}
Run Code Online (Sandbox Code Playgroud)

并且添加项目的代码是:

Button addButton = (Button)findViewById(R.id.add_new);
addButton.setOnClickListener( new OnClickListener(){
    @Override
    public void onClick(View view) {
        addContentView( addIcon(), new RelativeLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT ) );
    }
});
Run Code Online (Sandbox Code Playgroud)

当我点击我的按钮时会发生什么,所有新创建的视图都放在另一个上面.我希望它们被放置在下一个元素的右侧.我在SO上快速搜索了与RelativeLayout相关的文章,并发现了一些相似的内容(这里,这里,这里,这里),但是这些内容解决了将内容引入RelativeView的问题,他们似乎没有解决定位问题. …

android relativelayout

4
推荐指数
1
解决办法
2万
查看次数

SqlAlchemy:自引用默认值作为查询

假设我有以下结构(使用Flask-SqlAlchemy):

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String, nullable=False, index=True)
    # The following line throws an error at runtime.
    variant = db.Column(db.Integer, nullable=False, index=True,
                        default=select(func.count(User.id)).where(User.name == self.name))

    def __init__(self, name):
        super(User, self).__init__()
        self.name = name

    @property
    def clause(self):
        return '/'.join([str(self.variant), self.name])
Run Code Online (Sandbox Code Playgroud)

问题是,"用户未定义".我想建模一个系统,用户可以选择相同的名称,但添加一个字段,以系统的方式区分用户,而不使用(从而暴露)"id"字段.

任何人都知道如何使用自引用查询来填充默认值?

python sqlalchemy

4
推荐指数
1
解决办法
979
查看次数

PostgreSQL-&gt; SQLite:等效于DATE_TRUNC

星期五下午,我炸了。因此,SQL爱好者同胞介绍了如何在PostgreSQL中采用以下WHERE子句并将其转换为SQLite3而不使用已编译的扩展名:

WHERE
  DATE_TRUNC('day', c.start_date) <= DATE_TRUNC('day', q.date) AND
  DATE_TRUNC('day', c.end_date) >= DATE_TRUNC('day', q.date)
Run Code Online (Sandbox Code Playgroud)

查看SQLite3中的日期/时间函数,似乎它们仅用于字符串格式。希望我看到了问题。

sql sqlite

4
推荐指数
1
解决办法
4266
查看次数

Scala中的自定义控件结构?

在使用Java或C++进行编程时,有很多次我遇到了一个简单的模式,自定义控件结构可以减少代码中的样板.它类似于:

 if( Predicate ){
     Action

     return Value
 }
Run Code Online (Sandbox Code Playgroud)

也就是说,"return if"类型语句.我已经尝试过制作带有签名的功能foo[A,B]( pred:((A,A)=>Boolean), value:Option[B] )但是我最终会检查我是否已经返回了Some或None.我被return声明绊倒了.

是否有继承方式在函数式语言或更具体的Scala中创建这样的控制结构?

编辑:

我的描述并不那么清楚,而且那些试图帮助我的人会感到困惑.我foo不工作的关键原因是它不能使包含函数的评估短路.那是

def intersect( geometry:Geometry, reference:Geometry ):Geometry = {
    return_if( withinBounds( geometry, projection ), logToString( logger, "Geometry outside " + projection.toString ), EmptyGeometry() )
    return_if( topologicallyCorrect( geometry ), intersect( correct( geometry ), reference )
    //rest of the function
}
Run Code Online (Sandbox Code Playgroud)

并且仍允许在内部进行尾递归return_if.

functional-programming scala control-structure

3
推荐指数
1
解决办法
866
查看次数

功能不打印预期结果

def white():
    print
print ("First line")
white()
print ("Second line")
Run Code Online (Sandbox Code Playgroud)

这是我的第一个脚本之一.当我按下"F5"键时,结果如下:

First line
Second line
Run Code Online (Sandbox Code Playgroud)

哪里出错了?

python function

3
推荐指数
1
解决办法
114
查看次数