小编Lau*_*ves的帖子

术语"monad"是否适用于Maybe或List等类型的值,或者它是否仅适用于类型本身?

我注意到"monad"这个词似乎以一种不一致的方式使用.我开始相信这是因为很多(如果不是大多数)monad教程是由那些刚刚开始自己​​构建monad的人写的(例如:核废料太空服卷饼),因此术语结束得到一些过载/损坏.

特别是,我想知道术语"monad"是否可以应用于Maybe,List或IO等类型的单个值,或者术语"monad"是否真的只应用于类型本身.

这是一个微妙的区别,所以也许类比可能会更清楚.在数学中,我们有,环,字段,组等.这些术语适用于整个值集以及可以对它们执行的操作,而不是单个元素.例如,整数(以及加法,否定和乘法的运算)形成一个环.你可以说"整数是一个戒指",但你永远不会说"5是一个戒指".

所以,你能说" Just 5是一个单子",还是会说"5是一个戒指"?我不知道类别理论,但我的印象是说" Maybe是一个单子"而不是" Just 5是一个单子" 真的是有道理的.

monads terminology

15
推荐指数
2
解决办法
701
查看次数

如何在生产系统上实际重命名 PostgreSQL 中的表和列?

经常发生的情况是,最初的名称并不是最好的名称。也许需求略有变化,或者随着时间的推移,对所代表的概念有了更好的理解。有时在开发一项功能时会使用一个名称,但对真实用户的测试表明需要一个更好的名称,并且最好让数据库中的事物名称与 UI 中使用的名称相匹配。

PostgreSQL 允许您通过以下方式重命名表和列alter table,但通常这在没有大量停机时间的生产中是不可行的。如果现有客户正在使用旧名称,您不能只是将其从他们的名称中删除。

我希望有某种方法可以向表或列“添加名称”,这样old_namenew_name都可以工作,然后稍后删除旧名称。然后名称迁移可以像这样工作:

  • 添加new_name
  • 修改所有客户端以使用new_name而不是old_name
  • 更新所有客户端后,删除old_name

有没有办法做到这一点?如果没有,是否有推荐的程序来重命名色谱柱,同时最大限度地减少停机时间?一张桌子怎么样?

postgresql

14
推荐指数
1
解决办法
5019
查看次数

如何将java类实例作为参数传递给JNI方法?

我想将java类对象传递给JNI方法,我想在JNI方法中调用几个方法,如下所示.

有没有人有像下面这样的例子?

class JavaClassParameter{
    void javaMethodTobeCalledInJNI(){
        ...java source...
    }
}

class MainJavaClass{
    void somemethod(){
        JavaClassParameter object = new JavaClassParameter();
        JNIMethod(object);
    }

    native void JNIMethod(JavaClassParameter object);
}


// C++ code
void JNIMethod(object){
    object->javaMethodTobeCalledInJNI();
}
Run Code Online (Sandbox Code Playgroud)

android-ndk

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

如何通过globbing子目录自动生成make目标列表?

我想使用单个Makefile在数百个子目录中生成目标.每个子目录都是一个日期/时间戳,如下所示:20120119_153957匹配以下模式????????_??????.没有其他子目录与此模式匹配.

我想要生成一个目标????????_??????/graph.pdf.我有一个调用的脚本make_graph,它将使图形被赋予子目录名称.但我不确定如何编写一个Makefile,它将自动为所有子目录添加并以编程方式生成这些目标.

例如,代码SUBDIRS:=????????_??????似乎正确地遍历所有子目录.我可以查看这个规则:

.PHONY: print
print:
        echo $(SUBDIRS)
Run Code Online (Sandbox Code Playgroud)

但是这个变量赋值

TARGETS:=$(SUBDIRS:%=%/graph.pdf)
Run Code Online (Sandbox Code Playgroud)

似乎没有做我期望的事情并分配了很多很多目标.相反,以下规则只打印一个目标.

.PHONY: print
print:
        echo $(TARGETS)
Run Code Online (Sandbox Code Playgroud)

SUBDIRS应该拥有正确的子目录但TARGET只有一个文件是非常令人困惑的.

makefile gnu-make

11
推荐指数
1
解决办法
9870
查看次数

使用Mockito检查多个参数的一致性

我正在使用Mockito来模拟一个类似于以下方法的类:

setFoo(int offset, float[] floats)
Run Code Online (Sandbox Code Playgroud)

我希望能够验证array(floats)中的值是否与预期值数组中的值相等(在给定的容差范围内).

问题是,我想检查floats从指定位置开始的内容offset.出于测试的目的,我不知道/关心偏移是什么,只要它指向我期望的值.我也不在乎数组的其余部分包含什么.我只关心从提供的偏移量开始的值.

我该怎么做呢?

java mocking mockito

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

找不到方法commandLine()

我正在尝试在gradle/Android-Studio版本中添加pre-pre-build shell脚本.我添加了以下内容app/build.gradle:

task prePreBuild << {
  commandLine 'ls'
}
preBuild.dependsOn prePreBuild
Run Code Online (Sandbox Code Playgroud)

当我调用我的构建时,./gradlew assembleDebug我收到以下错误:

Could not find method commandLine() for arguments [ls] on project ':app'
Run Code Online (Sandbox Code Playgroud)

如果我commandLine用类似的东西替换线条println 'Hello'它工作正常,我可以看到我的新任务的输出.

我搜索了"找不到方法命令行"的其他提及但没有找到任何内容.从此gradle任务调用shell脚本的正确方法是什么?

android gradle android-studio

11
推荐指数
1
解决办法
5516
查看次数

在通用接口中实现可空类型

所以在之前的一个问题中我询问过如何使用公共类和宾果实现通用接口,它可以工作.但是,我想要传入的其中一种类型是内置的可空类型之一,例如:int,Guid,String等.

这是我的界面:

public interface IOurTemplate<T, U>
    where T : class
    where U : class
{
    IEnumerable<T> List();
    T Get(U id);
}
Run Code Online (Sandbox Code Playgroud)

所以,当我这样实现时:

public class TestInterface : IOurTemplate<MyCustomClass, Int32>
{
    public IEnumerable<MyCustomClass> List()
    {
        throw new NotImplementedException();
    }

    public MyCustomClass Get(Int32 testID)
    {
        throw new NotImplementedException();
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到错误消息:类型'int'必须是引用类型才能在泛型类型或方法'TestApp.IOurTemplate'中将其用作参数'U'

我试图推断类型Int32?,但同样的错误.有任何想法吗?

c# interface reference exception reference-type

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

顶点属性是否可以成为GLSL-ES 2.0中的数组?

在GLSL-ES中,可以有阵列.例如,GLSL ES规范给出了以下数组的统一变量示例:

uniform vec4 lightPosition[4];
Run Code Online (Sandbox Code Playgroud)

是否可以将顶点属性作为数组?换句话说,根据规范,以下是合法的吗?

attribute vec4 foo[3];  // three vec4s per vertex
Run Code Online (Sandbox Code Playgroud)

GLSL ES规范中的任何地方都明确提到了答案(是或否)?(我找不到它,但我没有读过规范的每一行.)

此外,如果它是合法的,如何使用OpenGL ES 2.0 API初始化这样的属性?(假设glVertexAttribPointer会使用,顶点/ array-elements/vector-elements的布局是什么?)

glsl opengl-es-2.0

8
推荐指数
1
解决办法
2942
查看次数

什么是类型约束的类型?

例如,Num a => a.

我认为它们只是被称为"受约束的类型",但谷歌搜索没有出现该术语的许多用法,所以我很想知道它们是否有其他名称.

haskell ghc

8
推荐指数
4
解决办法
467
查看次数

如何获取可调用的签名参数,或者可靠地确定何时不可以?

内置int有两个参数:

>>> print(int.__doc__)
int(x=0) -> integer
int(x, base=10) -> integer

Convert a number or string to an integer, or return 0 if no arguments
...
Run Code Online (Sandbox Code Playgroud)

但是,(在CPython 3.4.0中)inspect.signature显示0:

>>> len(inspect.signature(int).parameters)
0
Run Code Online (Sandbox Code Playgroud)

与用户定义的功能相反:

>>> def my_int(x, base=10):
...     return int(x, base)
... 
>>> len(inspect.signature(my_int).parameters)
2
Run Code Online (Sandbox Code Playgroud)

对文档inspect.signature不这样说:

在某些Python实现中,某些可调用内容可能无法内省.例如,在CPython中,C中定义的一些内置函数不提供有关其参数的元数据.

但他们也说:

如果不能提供签名,则引发ValueError;如果不支持该类型的对象,则引发TypeError.

所以我很惊讶,我没有得到一个ValueError,而是得到了一个看起来不正确的签名.

有没有办法可靠地(并以编程方式)确定何时无法获得可调用的参数inspect?也就是说,如果我得到类似的东西int,有没有办法区分"这个东西没有任何参数"和"不可能确定这个东西有什么参数"?

python python-3.x

8
推荐指数
1
解决办法
779
查看次数