小编Lau*_*ves的帖子

除了"符号"之外,为什么Clojure还有"关键字"?

我从其他方面了解其他Lisps(特别是Scheme).最近我一直在读关于Clojure的文章.我看到它有"符号"和"关键字".符号我很熟悉,但没有关键字.

其他Lisps有关键字吗?关键字如何与除了具有不同符号(即:冒号)之外的符号不同?

lisp scheme clojure keyword

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

适用于Perforce用户的Git

我一直在使用Perforce多年.我想切换到使用git作为我的个人代码,但是我见过的所有git教程都假定你是一个完整的源代码控制n00b(这使得它们非常繁琐)或者你已经习惯了svn(我不是).

我知道p4,我也理解分布式源代码控制系统背后的想法(所以我不需要销售推销,谢谢).我想要的是从p4命令到等效git命令的转换表,以及没有p4等效的"不能没有"命令.

因为我怀疑每个p4用户都使用了不同的p4子集,所以这里有一些我经常在p4中做的事情,我希望能够在git中完成这些事情,这些事情从我看过的文档中看不出来:

  1. 在单个客户端中创建多个挂起的更改列表.(p4 change)
  2. 编辑待定的更改列表.(也p4 change)
  3. 查看我所有挂起的更改列表的列表(p4 changes -s pending)
  4. 我的客户端(p4 opened)或待定更改列表(p4 describe)中所有已更改文件的列表
  5. 看到挂起的更改列表的差异(我使用的包装脚本使用p4 diffp4 describe)
  6. 对于给定文件,请查看哪些提交的更改列表影响了哪些行(p4 annotate)
  7. 对于给定文件,请参阅影响该文件的更改列表的描述列表(p4 log)
  8. 提交待定的更改列表(p4 submit -c)
  9. 中止待定的更改列表(p4 revert)

其中很多都围绕着"变革清单"."changelist"是p4术语.什么是git等效术语?

听起来像分支可能是git用户使用的代替p4调用更改列表的东西.有点混乱,因为p4也有一个叫做分支的东西,虽然它们似乎只是模糊的相关概念.(虽然我一直认为p4的分支概念非常奇怪,但它与分支的经典RCS概念不同.)

无论如何......我不知道如何通过git的分支来完成我通常在p4更改列表中所做的事情.在p4中,我可以这样做:

$ p4 edit a.txt
$ p4 change a.txt
Change 12345 created.
Run Code Online (Sandbox Code Playgroud)

此时我有一个包含a.txt的changlist.我可以编辑说明并继续工作而无需提交更改列表.此外,如果事实证明我需要对其他一些文件进行一些更改,比如在代码的某些其他层中说错误修复,我可以在同一个客户端中执行此操作:

$ p4 edit z.txt
$ p4 change z.txt
Change 12346 created.
Run Code Online (Sandbox Code Playgroud)

现在我在同一个客户端有两个单独的更改列表.我可以同时处理这些问题,而且我不需要做任何事情来"切换"它们.在提交时,我可以单独提交:

$ p4 submit -c 12346 …
Run Code Online (Sandbox Code Playgroud)

git perforce

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

在Android中声明可设置的属性

关于declare-styleable标记的珍贵文档很少,我们可以通过它来声明组件的自定义样式.我确实找到了这个标签format属性的有效值列表attr.虽然这很好,但它没有解释如何使用其中的一些值.浏览attr.xml(标准属性的Android源代码),我发现你可以做以下事情:

<!-- The most prominent text color.  -->
<attr name="textColorPrimary" format="reference|color" />
Run Code Online (Sandbox Code Playgroud)

format属性显然可以设置为值的组合.据推测,该format属性有助于解析器解释实际的样式值.然后我在attr.xml中发现了这个:

<!-- Default text typeface. -->
<attr name="typeface">
    <enum name="normal" value="0" />
    <enum name="sans" value="1" />
    <enum name="serif" value="2" />
    <enum name="monospace" value="3" />
</attr>

<!-- Default text typeface style. -->
<attr name="textStyle">
    <flag name="normal" value="0" />
    <flag name="bold" value="1" />
    <flag name="italic" value="2" />
</attr>
Run Code Online (Sandbox Code Playgroud)

这两个似乎都声明了一组指定样式的允许值.

所以我有两个问题:

  1. 可以采用一组enum值之一的样式属性与可以采用一组值的样式属性之间的区别是什么flag? …

xml android styleable declare-styleable

77
推荐指数
2
解决办法
7万
查看次数

Android(2D)Canvas绘图管道的各个部分如何组合在一起?

我想更好地了解Android(2D)Canvas绘图管道的组件如何组合在一起.

例如,XferMode,Shader,MaskFilterColorFilter如何交互?这些类的参考文档非常稀疏,CanvasPaint的文档并没有真正添加任何有用的解释.

我也不完全清楚具有内在颜色的绘图操作(例如:drawBitmap与"矢量"原语相比drawRect)是否适合所有这些 - 他们总是忽略Paint颜色并使用其内在颜色吗?

我也很惊讶,人们可以这样做:

Paint eraser = new Paint();
eraser.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
canvas.drawOval(rectF, eraser);
Run Code Online (Sandbox Code Playgroud)

这抹去了椭圆形.在我注意到这一点之前,我的心理模型是绘制到画布(概念上)绘制到单独的"图层",然后使用Paint的传输模式使用Canvas的位图组合该图层.如果它那么简单那么上面的代码将擦除整个位图(在剪辑区域内),因为CLEAR 总是将颜色(和alpha)设置为0,而不管源的alpha是什么.所以这意味着还有一种额外的掩蔽来限制擦除到椭圆形.

我确实找到了API演示,但是每个演示都"在真空中"工作,并没有显示它关注的东西(例如:XferModes)如何与其他东西(例如:ColorFilters)交互.

有了足够的时间和精力,我可以凭经验弄清楚这些部分是如何相关或破译源的,但我希望其他人已经解决了这个问题,或者更好的是,有一些管道/绘图模型的实际文档,我错过了.

这个问题的灵感来自于在另一个SO问题的答案中看到代码.

更新

在寻找一些文档的同时,我想到,由于我在这里感兴趣的东西似乎是一个非常薄的贴面,在skia之上,也许有一些skia文档会有所帮助.我能找到的最好的东西是文件SkPaint说:

可以为paint分配6种效果:

  • SkPathEffect - 在生成alpha蒙版(例如,破折号)之前对几何(路径)的修改
  • SkRasterizer - 组成自定义遮罩层(例如阴影)
  • SkMaskFilter - 在对alpha蒙版进行着色和绘制之前对其进行修改(例如模糊,浮雕)
  • SkShader - 例如渐变(线性,径向,扫描),位图图案(钳位,重复,镜像)
  • SkColorFilter - 在应用xfermode之前修改源颜色(例如颜色矩阵)
  • SkXfermode - 例如porter-duff transfermodes,混合模式

它没有明确说明,但我猜这里效果的顺序是它们在管道中出现的顺序.

android skia android-canvas

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

如何从bash grep输出中删除最后一个字符

COMPANY_NAME=`cat file.txt | grep "company_name" | cut -d '=' -f 2` 
Run Code Online (Sandbox Code Playgroud)

输出这样的东西

"Abc Inc";
Run Code Online (Sandbox Code Playgroud)

我想要做的是我想删除尾随的";" 同样.我怎样才能做到这一点?我是bash的初学者.任何想法或建议都会有所帮助.

bash grep

51
推荐指数
7
解决办法
13万
查看次数

gradle汇编和gradle build taks之间的区别是什么?

如果我没看错的gradle assemble不运行gradle assembleDebuggradle assembleRelease,但我相信gradle build也不会是相同的,所以是什么他们两个之间有什么不同?

android android-gradle-plugin

50
推荐指数
4
解决办法
3万
查看次数

有没有办法检查两个集合是否包含相同的元素,与订单无关?

我一直在寻找一种操作类似Arrays.equals(a1, a2)但忽略元素顺序的方法.我无法在Google Collections中找到它(类似的东西Iterables.elementsEqual(),但确实考虑到了排序)和JUnit(assertEquals()显然只是调用equals()Collection,这取决于Collection实现,而这不是我想要的)它会如果这样的方法会采用Iterables,那就最好了,但是我也可以简单地使用Collections这样的方法当然会考虑集合中的任何重复元素(所以它不能简单地测试containsAll()).

请注意,我不是在问如何实现这样的事情,我只是想知道是否有任何标准的Collections库都有它.

java collections equals

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

如何使用命令行中的GIMP将XCF转换为PNG?

作为构建过程的一部分,我需要将许多XCF(GIMP的本机格式)图像转换为PNG格式.我确信这应该可以使用GIMP的批处理模式,但我忘记了我曾经知道的所有脚本.

我的输入图像有多个图层,所以我需要等效于"合并可见图层"的批处理模式,然后是"另存为PNG".另请注意,我无法安装任何内容~/.gimp*/scripts/- 我需要一个自包含的命令行,或者在源代码树中安装脚本的方法.

请注意,虽然这与此问题类似,但我还有其他约束,我需要使用GIMP完成此操作.我尝试了当前版本的ImageMagick,它会破坏我的测试图像.

image-manipulation gimp script-fu

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

匿名类*总是*保持对其封闭实例的引用吗?

我正在处理一些代码,其中一个对象"foo"正在创建另一个对象"bar",并将其传递给它Callable.在此foo之后将返回bar,然后我希望foo变得无法访问(即:可用于垃圾收集).

我最初的想法是Callable匿名创建.例如:

class Foo {
  ...

  public Bar createBar() {
    final int arg1 = ...
    final int arg2 = ...
    final int arg3 = ...
    return new Callable<Baz>() {
      @Override
      public Baz call() {
        return new Baz(arg1, arg2, arg3);
      }
    };
  }
}
Run Code Online (Sandbox Code Playgroud)

在我看来,这可能实际上并不按预期工作,因为内部类通常会保持对其封闭对象的引用.我不希望在这里引用封闭类,因为我希望在Callable仍然可以访问时收集封闭对象.

另一方面,检测到实际上从未引用封闭实例应该是非常简单的,因此Java编译器可能足够聪明,在这种情况下不包括引用.

那么......一个匿名内部类的实例是否会持有对其封闭实例的引用,即使它实际上从未使用封闭的实例引用?

java garbage-collection anonymous-class

28
推荐指数
2
解决办法
7617
查看次数

如何避免在使用合成时在模块'Main'中定义''main'

我正在尝试在Haskell中编写一个模块.它没有,main因为它不是一个独立的程序.

我刚开始使用syntastic,它不断报告:

The IO action ‘main’ is not defined in module ‘Main’
Run Code Online (Sandbox Code Playgroud)

这可以防止它报告我的模块中的其他实际错误.如果我尝试通过添加虚拟主体来解决这个问题,它会开始抱怨所有其他内容都是"已定义但未使用".

我怎么能告诉我们不应该是一个合成器(以及它在幕后使用的任何检查器)main

haskell syntastic

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