假设我有这段代码:
func hello<T>(thing: T) -> String {
return "hello \(thing)"
}
Run Code Online (Sandbox Code Playgroud)
我是否可以编写一个hello不能编译的函数版本,如果它是通过可选的?
let foo = "some"
let bar: String? = nil
print(helloNoOptional(foo)) // should compile
print(helloNoOptional(bar)) // should not compile
Run Code Online (Sandbox Code Playgroud)
我想也许它可以通过whereT上的协议一致性或条款来实现,但是我无法想到它究竟是如何工作的.
我想这样做的原因是因为我正在处理遗留代码库中的实际函数,如果thing是nil 则没有明智的行为.因此,我宁愿防止hello被调用于一个可选项,而不是处理thing在hello中解包并尝试找出合理的错误行为.
更新:
一条可能的路径......我意识到Optional枚举符合NilLiteralConvertible协议.因此,如果我能找到一种方法来限制我的泛型不符合类型,我可以事实上排除选项.但我不知道是否有可能做类似的事情
<T where !T: NilLiteralConvertible>
Run Code Online (Sandbox Code Playgroud) 可能很容易回答这个问题,但我甚至无法弄清楚如何制定Google查询来查找它.
我正在针对包含空白节点的数据集编写SPARQL构造查询.所以,如果我做一个像这样的查询
CONSTRUCT {?x ?y ?z .}
WHERE {?x ?y ?z .}
然后我的一个结果可能是:
nm:John nm:owns _:Node
这是一个问题,如果所有的
_:Node nm:has nm:Hats
三元组也不会以某种方式进入查询结果(因为我使用的一些解析器就像rdflib for Python真的不喜欢悬空的bnodes).
有没有办法编写我的原始CONSTRUCT查询以递归方式添加附加到任何bnode结果的所有三元组,以便在我的新图形中没有留下任何bnodes?
我正在为移动应用程序开发Django Rest Framework后端.API是私有的,只能在内部使用.
可浏览的API便于帮助开发项目的开发人员,但我希望阻止任何未设置为项目管理员的人使用可浏览界面.
我意识到可浏览的管理员不会授予用户不会拥有的任何权限,但它确实有一些安全灰色区域(例如,对于具有外键关系的模型,HTML选择器字段会填充所有可能的相关对象在DB中,除非你明确指示它不要).
因为这个应用程序处理敏感的用户数据,我宁愿向公众公开可能的最小表面区域,以减少我自己潜在的错误疏忽的风险.
有没有办法为非管理员用户禁用可浏览的API而不为每个人禁用它?我已经做了大量的Google搜索并查看了SO并且没有找到答案.这个问题很接近如何禁用django-rest-framework的管理式可浏览界面?但不一样,因为这些指令会禁用每个人的界面.
我正在尝试将Neo4j用于一个项目,并希望通过Python与它进行交互,因为我是编程的新手并且不知道任何Java.我正在按照安装说明操作,但我坚持第一步,即安装JPype.
我正在使用OS X 10.7(狮子).我认为我的配置非常标准,从Python网站下载的Python 2.7.2和从Apple网站下载的Java 1.6.0.
我跑的时候
% sudo python setup.py install
Run Code Online (Sandbox Code Playgroud)
在JPype安装程序中,我得到大约100行关于各种.h文件的错误代码,然后它以行终止:
lipo: can't figure out the architecture type of: /var/tmp//
ccwOzLi9.out
error: command 'gcc-4.2' failed with exit status 1
Run Code Online (Sandbox Code Playgroud)
我发现了一篇关于JPype的gcc错误的博客文章,但我按照那里的说明无济于事.我还通过电子邮件发送了该帖子的作者,他告诉我从未实际使用过JPype,曾经在OS X 10.6中工作,并且没有任何见解.
我还通过电子邮件发送了JPype的创建者,他告诉我他只使用Windows,并且不知道如何在OS X上安装.但是如果我们能解决这个问题,我可以指出他的答案,也许他可以添加JPype文档的解决方案,也帮助了很多其他人!
那么,有谁知道我做错了什么?我想使用Neo4j,但我不懂Java,所以我完全不知道如何解决编译错误.
基于阅读所有可用的Google结果,我的两个运行理论是:
我在某种程度上使用32位版本的Python或Java(虽然我使用标准的官方安装,但无法弄清楚如何切换到64位或甚至可能)
JPype文件只能使用GCC 4.0而不是4.2编译.但我无法在网上找到有关如何回滚到GCC 4.0的任何内容(或者它是否附带2011款MacBooks,并且有一些方法可以强制JPype使用它进行编译).
还有另一个类似的问题,但解决方案是使用不同的适配器,通过REST而不是直接挂钩到Java.如果必须,我会尝试,但如果可能的话,我宁愿使用推荐的Neo4j方法.
我正在尝试用Python构建一个算法来过滤大块的RDF数据.
我有一个列表,包括大约7万个格式化的项目<"datum">.
然后,我有大约6GB的物品(三倍)格式化 <"A"> <"B"> <"C">
我想提取包含第一个列表中任何项目的所有三元组,然后从第一个提取中提取包含任何单个项目的任何三元组(净效果是形成图形的分区,该分区通过一步连接到种子从第一个列表).
我没有能够为此提出一个很好的算法(没有正确的CS训练,这没有帮助.)
到目前为止,我提出的最好的方法是首先将大列表中的三元组分成三个项目列表[<"A">, <"B">, <"C">].然后我将它分成块,并使用多处理创建进程,这些进程占用完整的小列表和大列表的一大块...
for line in big list:
for item in small list:
if item in line:
bucket.append(line)
Run Code Online (Sandbox Code Playgroud)
这个算法需要很长时间.
有没有更快的方法来做到这一点?如果有一个特定的算法,你可以给我一个名字,我会弄清楚如何实现它.
谢谢!
每条评论的澄清:
所有数据项都是字符串.所以小列表可能包含["Mickey", "Mouse", "Minny", "Cat"],大列表可能是[["Mickey","Pluto","Bluto"],["John", "Jane", "Jim]...]
每个大列表三元组中只有一个项目需要匹配小列表中的项目以进行计数
小列表中的所有项目实际上都是唯一的,所以我认为无论如何都不会将它们转换为集合.但我会尝试.
我可以创建我想要的任何中间结构.我正在尝试使用搁架构建的倒置索引.
因此,对于Django项目,我真的希望能够动态地生成和显示表(不基于查询集),而无需事先知道内容或模式.
看起来django-tables2应用程序为呈现表提供了很好的功能,但它要求您通过在自定义的Table子类上声明属性来显式声明列名,或者为它提供推断列的模型.
即,要使用名为"name"的列,您可以:
class NameTable(tables.Table):
name = tables.Column()
Run Code Online (Sandbox Code Playgroud)
Tables类没有提供事后添加列的方法,因为从读取源代码开始,它似乎使用了一个元类来清除__new__上的类属性并锁定它们.
看起来非常简单的元编程将是一个优雅的解决方案.我定义了一个接受列名为参数的基类工厂:
def define_table(columns):
class klass(tables.Table): pass
for col in columns:
setattr(klass, col, tables.Column())
return klass
Run Code Online (Sandbox Code Playgroud)
可悲的是,这不起作用.如果我跑'
x = define_table(["foo", "bar"])(data)
x.foo
x.bar
Run Code Online (Sandbox Code Playgroud)
我回来了:
<django_tables2.columns.base.Column object at 0x7f34755af5d0>
<django_tables2.columns.base.Column object at 0x7f347577f750>
Run Code Online (Sandbox Code Playgroud)
但是,如果我列出列:
print x.base_columns
Run Code Online (Sandbox Code Playgroud)
我什么都没回来,即{}
我意识到可能有更简单的解决方案(例如只是咬紧牙关并在代码中定义每个可能的数据配置,或者不使用django-tables2并自己动手),但我现在将此视为一个了解更多信息的机会元编程,所以我真的想以这种方式工作.
知道我做错了什么吗?我的理论是__new__方法(在元类表使用中重新定义)在定义klass时被调用,而不是在实例化时调用,所以当我对属性进行处理时,为时已晚.但这违反了我对__new__何时应该发生的理解.否则,我很难理解元类__new__如何区分定义代码属性与动态定义属性之间的区别.
谢谢!
[求助]不知何故,我设法没有.git目录的"写"权限.所以试图写入提交并被反弹.
我已经使用Eclipse几个月了,但是刚从CLI运行git.我觉得效率很低,而且我想使用eGit,所以我开始学习本教程(http://www.slideshare.net/loianeg/using-the-egit-eclipse-plugin-with-git-hub-2578587?从嵌入=).
我正在尝试添加一个现有项目,所以我做了Team - > Share Project - > Git并选择了与我的项目相对应的.git.Eclipse似乎已经把它拿起来了,好吧,但是当我尝试提交时,我得到一个弹出窗口说
"提交更改遇到了问题" - 发生了内部错误.
当我单击详细信息时,它会说"发生内部错误在执行commit命令期间捕获异常"
......我甚至不知道从哪里开始.我用Google搜索了错误并没有得到任何有用的信息.
任何人都知道如何解决这个问题,或者至少如何开始调试?