F#第三课 : .net库与F#
2009-11-24 00:58
141 查看
今天继续学习F#,主要的内容是关于.net库在F#中的引用。
首先我们引入一些常用的.net名称空间到F#环境
open System
open System.Net
open System.IO
open System.Text
open System.Xml
open System.Windows
open System.Windows.Forms
第一个例子,先展示一下F#强大的兼容性,获取一个网址的HTML代码
let webSite = "http://www.google.com/"
let getHtmlByUrl(url: string) = // 注意这里,由于我们在使用HttpWebRequest.Create 方法时,该方法有两个重载函数,所以我们需要显式的去指定参数的类型
let request = HttpWebRequest.Create(url)
let response = request.GetResponse()
let reader = response.GetResponseStream()
let strReader = new StreamReader(reader)
let resHtml = strReader.ReadToEnd()
resHtml
运行这段代码我们会得到如下输出:
> getHtmlByUrl(webSite);;
val it : string =
"<!doctype html><html><head><meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"><title>Google</title><script>window.google={kEI:"qbwKS_jQAoqI6gP9ovTZDw",kEXPI:"17259,22107,22914,22918",kCSI:{e:"17259,22107,22914,22918",ei:"qbwKS_jQAoqI6gP9ovTZDw"},kHL:"en",time:function(){return(new Date).getTime()}
这个代码太长就不粘出来了。这里主要说的是这个例子使用了.net的Web类来获取指定url的源代码,我们可以看到F#在使用.net库的时候也是很方便的,你只需要使用open关键字来打开需要的.net包即可。这个关键字跟C#中的using和Java中的Import比较类似。在这个例子中,我们还使用了如StreamReader这样的类来帮助我们获取代码内容。
下面这个例子我们尝试将上面取得的源代码字符输出到一个winform的窗口上
let mainForm = new Form()
let textBox1 = new TextBox()
textBox1.Dock <- DockStyle.Fill
textBox1.Multiline <- true
textBox1.Text <- getHtmlByUrl(webSite)
mainForm.Controls.Add(textBox1)
mainForm.ShowDialog()
输出:
在这个例子中,我们创建了一个winform对象,又创建了一个TextBox对象并设置了一些属性,最后将取得的Html源代码显示到这个文本框中。基本上操作跟C#的代码一样,唯一需要注意的是F#的赋值操作符是<-,而不是我们常见的=号。这种赋值方式在数学界是很普遍的,所以在编程语言之初,数学家对在程序中使用=来进行赋值充满了异议。
从上面的两个例子我们可以看到,F#在对.net库的兼容性还是非常好的,这样也提高了不少该语言的实用价值。
最后一个例子我们回到大家经常使用的XML文档开发中来,我们看一下在F#中我们如何进行XML的开发
let xml = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>
<root>
<child>1</child>
<child>2</child>
<child>
<subChild>3</subChild>
</child>
</root>"
let doc = new XmlDocument()
doc.LoadXml(xml)
我们逐个遍历Xml节点,并将节点的内容放入一个list中。
let items =
[
for node in doc.SelectNodes("root/child") do
let link = if node.FirstChild.NodeType = XmlNodeType.Text then node.InnerXml else node.FirstChild.InnerText
yield(link)
]
怎么样,代码相当简洁吧!
发两句牢骚:
VS2010 Beta2 IDE对native C/C++的支持还是不怎么样。居然连Memory的窗口都没集成进来。而且还不能将目标程序放到工程以为的目录下进行调试。看来还是得等等咯。
首先我们引入一些常用的.net名称空间到F#环境
open System
open System.Net
open System.IO
open System.Text
open System.Xml
open System.Windows
open System.Windows.Forms
第一个例子,先展示一下F#强大的兼容性,获取一个网址的HTML代码
let webSite = "http://www.google.com/"
let getHtmlByUrl(url: string) = // 注意这里,由于我们在使用HttpWebRequest.Create 方法时,该方法有两个重载函数,所以我们需要显式的去指定参数的类型
let request = HttpWebRequest.Create(url)
let response = request.GetResponse()
let reader = response.GetResponseStream()
let strReader = new StreamReader(reader)
let resHtml = strReader.ReadToEnd()
resHtml
运行这段代码我们会得到如下输出:
> getHtmlByUrl(webSite);;
val it : string =
"<!doctype html><html><head><meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"><title>Google</title><script>window.google={kEI:"qbwKS_jQAoqI6gP9ovTZDw",kEXPI:"17259,22107,22914,22918",kCSI:{e:"17259,22107,22914,22918",ei:"qbwKS_jQAoqI6gP9ovTZDw"},kHL:"en",time:function(){return(new Date).getTime()}
这个代码太长就不粘出来了。这里主要说的是这个例子使用了.net的Web类来获取指定url的源代码,我们可以看到F#在使用.net库的时候也是很方便的,你只需要使用open关键字来打开需要的.net包即可。这个关键字跟C#中的using和Java中的Import比较类似。在这个例子中,我们还使用了如StreamReader这样的类来帮助我们获取代码内容。
下面这个例子我们尝试将上面取得的源代码字符输出到一个winform的窗口上
let mainForm = new Form()
let textBox1 = new TextBox()
textBox1.Dock <- DockStyle.Fill
textBox1.Multiline <- true
textBox1.Text <- getHtmlByUrl(webSite)
mainForm.Controls.Add(textBox1)
mainForm.ShowDialog()
输出:
在这个例子中,我们创建了一个winform对象,又创建了一个TextBox对象并设置了一些属性,最后将取得的Html源代码显示到这个文本框中。基本上操作跟C#的代码一样,唯一需要注意的是F#的赋值操作符是<-,而不是我们常见的=号。这种赋值方式在数学界是很普遍的,所以在编程语言之初,数学家对在程序中使用=来进行赋值充满了异议。
从上面的两个例子我们可以看到,F#在对.net库的兼容性还是非常好的,这样也提高了不少该语言的实用价值。
最后一个例子我们回到大家经常使用的XML文档开发中来,我们看一下在F#中我们如何进行XML的开发
let xml = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>
<root>
<child>1</child>
<child>2</child>
<child>
<subChild>3</subChild>
</child>
</root>"
let doc = new XmlDocument()
doc.LoadXml(xml)
我们逐个遍历Xml节点,并将节点的内容放入一个list中。
let items =
[
for node in doc.SelectNodes("root/child") do
let link = if node.FirstChild.NodeType = XmlNodeType.Text then node.InnerXml else node.FirstChild.InnerText
yield(link)
]
怎么样,代码相当简洁吧!
发两句牢骚:
VS2010 Beta2 IDE对native C/C++的支持还是不怎么样。居然连Memory的窗口都没集成进来。而且还不能将目标程序放到工程以为的目录下进行调试。看来还是得等等咯。
相关文章推荐
- F#第三课:组合函数
- CoolWeather项目实战(第三部分终章:手动更新天气和切换城市以及后台自动更新)--->第一行代码-Android(第2版)
- 第三阶段-tensorflow项目之图像image相关--tensorflow搭建CNNs 之CIFAR-10多个GPU运行
- 使用机器学习预测天气(第三部分神经网络)
- 未来混合云的发展可能有两个方向 | 5G技术研发试验第三阶段规范正式发布
- Java笔记 ------ 第三弹
- 查找入职员工时间排名倒数第三的员工所有信息
- python第三课
- python练习册第三题
- 北航研究生复试2009上机第三题:字符串查找删除
- 关于开发类instragram网站第三课遇到的问题以及解决方案
- 北航研究生复试2011上机第三题:显示省略
- 学习淘淘商城第三课(使用tomcat插件启动web工程)
- cs231n---Python Numpy教程(第三弹)---终
- 漫话JavaScript与异步·第三话——微信牌九源码出售:化异步为同步
- 第十章项目第三阶段
- 第七届蓝桥杯第三题
- 第八届蓝桥杯C++B组第三题:承压计算
- 2018华科计算机笔试第三题--分母转化成小数
- 剑指offer第三题打印链表