小编Vin*_*ren的帖子

为什么称它为"开放(或封闭)递归?

我找到了一些关于打开/关闭递归的解释,但我不明白为什么定义包含"递归"这个词,或者它与动态/静态调度的比较.在我发现的解释中,有:

打开递归.大多数语言使用对象和类提供的另一个便利功能是一个方法体通过一个名为self或在某些语言中调用的特殊变量来调用同一对象的另一个方法的能力this.self的特殊行为是它是后期绑定的,允许在一个类中定义的方法在第一个类的某个子类中调用稍后定义的另一个方法.[ Ralf Hinze ]

......或者在维基百科:

调度语义this,即对此调用的方法调用是动态调度的,称为开放递归,意味着这些方法可以被派生类或对象覆盖.相比之下,函数的直接命名递归或匿名递归使用闭合递归,具有早期绑定.

我还阅读了StackOverflow问题:什么是开放递归?

但我不明白为什么"递归"这个词用于定义.当然,如果通过执行方法递归调用来使用"开放递归",它可能会导致有趣(或危险)的副作用.但是定义不直接考虑方法/函数递归调用(在维基百科定义中显示"封闭递归",但听起来很奇怪,因为"打开递归"并不是指递归调用).

你知道为什么定义中有"递归"这个词吗?是因为它是基于另一个我不知道的计算机科学定义吗?应该简单地说"动态调度"还不够吗?

oop programming-languages definition this dynamic-dispatch

16
推荐指数
1
解决办法
2237
查看次数

以编程方式添加证书颁发机构,同时保留Android系统SSL证书

StackOverflow上有很多关于这个主题的问题,但我似乎找不到与我的问题相关的问题.

我有一个需要与HTTPS服务器通信的Android应用程序:一些与在Android系统密钥库中注册的CA(常见的HTTPS网站)签名,一些使用我拥有但不在Android系统密钥库(具有例如,自动签名证书).

我知道如何以编程方式添加我的CA并强制每个HTTPS连接使用它.我使用以下代码:

public class SslCertificateAuthority {

    public static void addCertificateAuthority(InputStream inputStream) {

        try {
            // Load CAs from an InputStream
            // (could be from a resource or ByteArrayInputStream or ...)
            CertificateFactory cf = CertificateFactory.getInstance("X.509");
            InputStream caInput = new BufferedInputStream(inputStream);
            Certificate ca;
            try {
                ca = cf.generateCertificate(caInput);
            } finally {
                caInput.close();
            }

            // Create a KeyStore containing our trusted CAs
            String keyStoreType = KeyStore.getDefaultType();
            KeyStore keyStore = KeyStore.getInstance(keyStoreType);
            keyStore.load(null, null);
            keyStore.setCertificateEntry("ca", ca);

            // Create a TrustManager that trusts the CAs …
Run Code Online (Sandbox Code Playgroud)

java https android ca ssl-certificate

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

Camel和BPEL之间的差异

SOA概念很容易掌握,但我对BPEL和Apache Camel等企业服务集成架构和技术并不熟悉.

我知道BPEL有助于协调服务,而且Camel是企业集成模式的实现.我目前正在阅读着名的企业集成模式书.

但EIP和管弦乐之间的界限对我来说似乎很薄弱.在我看来,Camel还以自己的方式协调服务.此外,Camel提供了许多连接器,因此可以轻松使用不同的协议.

Camel比BPEL更好吗?
或者是否可以使用您无法使用Camel执行的BPEL操作?
哪个?
关于我所阅读的内容,似乎Camel比BPEL更好地协调REST服务:这是真的吗?

rest soa web-services bpel apache-camel

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

Swift中有和没有@的关键字

在Swift中,有时候,关键字是普通关键字,而其他一些关键字则以@.

例如,weak,unowned,inout,class是平原.但是@final,@lazy从开始@.

有时,我们甚至都有!prefix并且@prefix,infix@infix例如.

它不完全是Objective-C继承,因为我们有@class而不是classObjective-C.我能理解为什么我们有class而不是@class在斯威夫特,但是既然我们有@final或者@lazy,我会认为应该@weak而不是weak.

为什么选择这个?是否有一种直观的方式应该告诉:"嘿,这个关键字的开头是合乎逻辑的@

即使我认为考虑到预处理器的观点,@在编译之前调用一种特定的预处理器并不明显(例如,@final它实际上不是一种预处理器指令).

programming-languages keyword swift

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

如何从主程序中检索iOS框架包中的文件/资源​​?

我使用有关为iOS开发创建通用二进制框架以分发库的方法.我还想在框架中添加文件,并将它们加载到主程序中(实际上是SSL证书).这与StackOverflow问题有关,主要区别在于我想要包含除XIB之外的其他内容.

如果我们读取与链接帖子相关的线程,似乎是不可能的.但是,提到了以下博客文章 ; 我们可以读到:

"静态框架不是标准框架的完全替代 - 访问框架资源的标准方法,例如+[NSBundle bundleForClass:]不会返回预期的bundle.通过查询dyld来确定与路径对应的库路径 - 在在静态链接的情况下,这将返回静态库链接到的二进制文件的路径.另外,NSBundle/CFBundle将检查返回地址的前一个堆栈,并使用该返回地址来确定调用代码的dyld二进制路径.这些限制,一些解决方法是可能的,例如-[NSBundle privateFrameworkPath] 用于定位嵌入式框架的路径."

我是iOS开发的初学者,我很难使用这样的机制.privateFrameworksPath确实使用返回路径,但我不知道接下来要做什么来找到我想要加载的文件.

它是这样的:

NSBundle * bundle = [NSBundle bundleForClass:[self class]];
NSString * path = [bundle privateFrameworksPath]; // Works, return something like .../Frameworks
NSString * file = [path stringByAppendingPathComponent:@"MyFramework.framework/Versions/A/my-cert.der"]; 
NSData * trustedCertData = [NSData dataWithContentsOfFile:file]; // Returns nil
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

xcode objective-c ios

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

相当于没有Android支持库的LocalBroadcastManager

StackOverflow和其他地方有很多示例使用该类LocalBroadcastManager来避免在应用程序之外广播事件.

但是,此类使用Android支持库,如包名称所示:android.support.v4.content.LocalBroadcastManager.

LocalBroadcastManager在标准SDK中是否有相当于不使用Android支持库的内容?

似乎没有这种sendBroadcast方法android.content.Context具有这种安全粒度.

sdk android android-broadcast

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

是否可以使用bitcode创建通用iOS框架?

根据我的理解,bitcode允许生成具有中间二进制格式的二进制文件.所以这是编译到ARM或x64架构之前的步骤.

.framework自iOS 8起,可以为iOS 创建"真实" 文件.但是,默认情况下,框架文件仅针对一种体系结构进行编译(模拟器,iPhone).当想要分发.framework文件时,最好提供与iOS模拟器兼容的文件,并且还可以部署到iPhone.可以找到不同的脚本示例来使用创建这样的胖文件lipo.

但是,是否可以仅将已.framework编译的bitcode分发而不必创建具有不同体系结构的胖文件?

不幸的是,即使为我启用了bitcode .framework:

  • 默认情况下,根据目标体系结构创建不同的文件
  • 即使似乎为框架目标启用了"存档"菜单,我也无法找到结果,即使在我的管理器视图中也是如此

我是否误解了bitcode的概念,或者我错过了什么?

xcode ios bitcode

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

我们能否知道从Windows或文本终端启动Python脚本?

我使用的是Windows版本的Python.我有一个使用Pyside的Python脚本(没什么复杂的,一种"hello world").

当我单击我的脚本文件或者从命令行启动它时,它会完美地执行,并且我会出现一个GUI.

但是,如果脚本是从文本终端(cmd.exe,cygwin,...)启动的话,我想避免使用GUI.一种自动知道它应该具有GUI输出还是文本输出的脚本.

有一种简单易行的方法吗?我希望能够使用Windows版本的Python(不是Cygwin软件包附带的版本).

当我从文本终端启动脚本时,一种显而易见的方法是添加一种"--no-gui"参数,但我想知道Python(或某些Python库)是否已经为此提供了工具.

此外,我在这台计算机上有一个SSH服务器(Cygwin-base),我可以远距离执行脚本但是没有GUI出现(当然),我没有错误消息.在这种情况下,由于缺少Windows图形支持或者脚本应该将其输出调整为文本终端,因此知道脚本是否失败是非常有趣的.

python windows ssh cygwin

7
推荐指数
1
解决办法
694
查看次数

我们可以欺骗Python for Cygwin作为win32平台吗?(安装PyBluez)

我想在Windows上使用与Cygwin一起打包的Python.我需要安装PyBluez,一个蓝牙Python绑定.我用easy_install安装它,没问题.我知道它与Windows版本的Python一起工作得很好,因为我安装了PyBluez的.exe并进行了一些测试.

但是我不想使用Windows版本的Python,而是使用Cygwin的版本.但实际上,使用easy_install或直接从tarball安装不能很好地工作(没有错误消息,但它没有完全安装).原因似乎很简单:在几个文件中,有一些条件语句:

if sys.platform == 'win32':
...
elif sys.platform == 'linux2':
...
elif sys.platform == 'darwin':
...
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我为Cygwin启动Python时,平台是:

$ python

>>> import sys
>>> sys.platform
'cygwin'
Run Code Online (Sandbox Code Playgroud)

有趣的是,当我们从Cygwin启动Python for Windows时,我们拥有哪个平台:

$ /cygdrive/d/Programs/Python26/python -i

>>> import sys
>>> sys.platform
'win32'
Run Code Online (Sandbox Code Playgroud)

我们可以想到修改PyBluez库中的一些Python文件,这样他们就可以同时考虑'win32'和'cygwin':

if sys.platform == 'win32' or sys.platform == 'cygwin':
...
Run Code Online (Sandbox Code Playgroud)

不幸的是,1)它意味着修改一些文件,2)它是不够的:在PyBluez的情况下,当我导入库时,我们在__init__.py文件中:

if sys.platform == "win32":
    _dbg("trying widcomm")
    have_widcomm = False
    dll = "wbtapi.dll"
    sysroot = os.getenv ("SystemRoot")
    ...
Run Code Online (Sandbox Code Playgroud)

os.getenv("SystemRoot")在启动Python for Windows时正确定义,但没有使用Python for Cygwin定义.

所以,我的问题是:有没有一种简单的方法可以欺骗Python,让Cygwin认为它是从win32平台启动的,具有所有正确的所需环境,而无需手动修改库设置文件?

也许根本不可能?(两个版本都在Windows上,但编译方式不同).

问题不仅限于PyBluez的安装,也适用于其他类型的库.

python windows cygwin

6
推荐指数
1
解决办法
1108
查看次数

拖放,ListView和缺少ACTION_DRAG_STARTED事件的项目视图

在Android上,我使用a ListView,我希望能够使用拖放重新排序其项目.我知道有一个"拖放列表视图"的不同实现,但我想使用自API级别11以来的拖放框架.

它开始非常好,直到我想ListView在拖放时滚动我.正如下面的例子中所写的那样,现在,我检查了我所在的列表元素的顶部,所以如果它的位置不在之间ListView.getLastVisiblePosition(),ListView.getFirstVisiblePosition()我使用a ListView.smoothScrollToPosition()来查看其他列表项.

这是第一个实现,但它运作良好.

滚动时会出现问题:DragEvent.ACTION_DRAG_ENTERED当我处于拖放状态时,某些元素不会回复拖放事件 - 以及其他元素.这是由于ListView管理其项目视图的方式:它尝试回收不再可见的项目视图.

这是所有权利和它的作品,但有时getView()的的ListAdapter回报率的新对象.由于它是新的,这个对象错过了DragEvent.ACTION_DRAG_STARTED所以它不回答其他DragEvent事件!

这是一个例子.在这种情况下,如果我通过长按一下列表项开始拖放,如果我拖动它,如果我在它们之上,大多数项目将具有绿色背景; 但有些人没有.

有没有想过让他们订阅拖放事件机制,即使他们错过了DragEvent.ACTION_DRAG_STARTED

// Somewhere I have a ListView that use the MyViewAdapter
// MyListView _myListView = ...
// _myListView.setAdapter(new MyViewAdapter(getActivity(), ...));
_myListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
    @Override
    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
        DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
        view.startDrag(null, shadowBuilder, _myListView.getItemAtPosition(position), 0);
        return …
Run Code Online (Sandbox Code Playgroud)

android drag-and-drop recycle android-listview

6
推荐指数
1
解决办法
5925
查看次数