大家下午好!
所以我一直在讨论将.NET Collection转换为功能数据结构的方法.我能得到的最好的就是先将它投射到seq,然后投入到我想要的任何东西之后.
问题是,这似乎打破了类型推断,这显然是不安全的.
例:
let a = new System.DirectoryServices.DirectorySearcher("<query>") in
let entries = a.FindAll ()
let entries_list =
let (entries_seq : seq<obj>) = Seq.cast entries_list in
Seq.toList entries_Seq
in
entries_list (* list of AD objects found from query, has type obj *)
Run Code Online (Sandbox Code Playgroud)
为了对entries_list做任何有用的事情,我必须这样做:
entries_list :?> SearchResult
Run Code Online (Sandbox Code Playgroud)
试图将它推广到seq <'a>失败,因为编译器仍然要求我静态地键入其枚举器(这是有道理的).
有没有办法避免这种情况?我开始认为这是以功能方式使用.NET数据结构的限制.
对不起,如果这是一个新手问题; 我对F#和一般的函数式编程都很环保(我喜欢它!).干杯!
我和一些同事创建了一个基于libpcap,GTK +和sqlite的简单数据包捕获应用程序,作为我们大学网络工程课程的一个项目.虽然它(大部分)都有效,但我正努力提高自己的编程技巧,如果社区成员能够看到我们整理的内容,我会很感激.
这是一个要求进行此类审核的好地方吗?如果没有,我可以提出这个问题的好网站是什么?源代码由Google Code(http://code.google.com/p/nbfm-sniffer)托管,可以下载可执行文件(仅限Windows,但它可以在Linux上编译,并且应该在OS X Leopard上编译为提供了一个已安装gtk + SDK).
感谢大家!
-Carlos Nunez
更新:感谢大家的好评.代码是完全开源的和可修改的(在Apache License 2.0下许可).考虑到我的帖子仍然很长,我希望得到更全面的反馈.
我在工作中编写的很多脚本都依赖于动态大小的数组的创建.VBScript中的数组使得这是一项非常艰巨的任务,因为Redim
每次想要调整它们时都需要数组.为了解决这个问题,我开始使用逗号分隔的字符串并使用它Split(...)
来创建一维数组.虽然这对我很有用,但我想知道VBScript是否有更有效的方法来处理它.所以我问StackOverflow; 在那儿?
免责声明:我完全清楚VBScript是一种非常不合标准的脚本语言,但Python需要额外的软件,这对于服务器自动化来说有点麻烦,而PowerShell还不是核心组件.不过,我正在学习它们两个!
我过去几个月一直在做一个高级项目,我们团队开发过程中的一个主要问题是处理Visual-C++和gcc之间的分歧.(是的,我知道我们都应该拥有相同的开发环境.)事情就此完成了,但是我今天碰到了一个温和的错误让我想知道Visual-C++对新手是否更容易(像我一样)按设计.
在我的一个标题中,有一个函数依赖于strtok
切断字符串,进行一些比较并返回类似格式的字符串.它的工作原理如下:
int main()
{
string a, b, c;
//Do stuff with a and b.
c = get_string(a,b);
}
string get_string(string a, string b)
{
const char * a_ch, b_ch;
a_ch = strtok(a.c_str(),",");
b_ch = strtok(b.c_str(),",");
}
Run Code Online (Sandbox Code Playgroud)
strtok
因为在标记化方面很出色而臭名昭着,但在销毁要标记化的原始字符串方面同样出色.因此,当我用gcc编译它并尝试用a
or 做任何事情时b
,我得到了意想不到的行为,因为在字符串中完全删除了使用的分隔符.这是一个我不清楚的例子; 如果我设置a = "Jim,Bob,Mary"
和b="Grace,Soo,Hyun"
,他们就被定义为a="JimBobMary"
和b="GraceSooHyun"
,而不是停留像我想的一样.
但是,当我在Visual C++下编译它时,我找回原始字符串并且程序执行正常.
我尝试动态地为字符串分配内存并以"标准"方式复制它们,但唯一有效的方法是使用malloc()
和free()
,我听说在C++中不鼓励.虽然我对此感到好奇,但我真正的问题是:为什么程序在用VC++编译时能够工作,而不是用gcc编写?
(这是我在尝试使代码跨平台时遇到的众多冲突之一.)
提前致谢!
-Carlos Nunez