动态.NET - 使用Silverlight和IronRuby创建交互式Bing Maps

2012-03-26
浏览
导读:Silverlight 的重要功能之一是支持动态语言(如 IronRuby 和 IronPython)。通过这一集成功能,可以使用 Silverlight 平台来开发富 Internet 应用程序 (RIA) -

Silverlight 的重要功能之一是支持动态语言(如 IronRuby 和 IronPython)。通过这一集成功能,可以使用 Silverlight 平台来开发富 Internet 应用程序 (RIA) - XAML 用于表示层,动态语言用于代码隐藏。本文演示 Silverlight 与动态语言的集成功能以及 Microsoft Bing Map 控件。首先,我将简要介绍动态语言,然后深入讨论 Silverlight 对这些语言的支持。最后,作为总结,我将演示如何使用 Microsoft Bing Map Silverlight 控件和 IronRuby 生成交互式 3D 动画位置查找 Silverlight 应用程序。

动态语言基础知识

Read-Eval-Print Loop (REPL) 环境通过使用动态(在运行时动态类型化和编译的语言),为开发人员提供轻型“即写即用”编程功能。您不需要声明特定数据类型的变量。所有代码均由运行时通过表达式上下文进行处理。

我们更熟悉的语言(如 C# 和 Visual Basic)是静态类型语言,在灵活性上稍逊一筹。与这些需要编译和分发输出的静态语言相比,使用动态语言进行开发和部署更为简单。不过,在使用动态类型语言时,仍然需要验证和测试类型安全性。

使用动态语言时,可以创建一个函数,然后将它赋给变量或作为参数传递给另一个函数。这样,可以更方便地使用闭包和将函数作为参数进行传递。通常,闭包有两个明确的特点:可以将代码块(函数)赋给变量;对于在创建时可访问的变量,代码块能够保留访问权限。

下面是用 C# 编写的传统 ShortWords 方法,该方法返回一个单词列表子集,其中包含符合单词长度不超过 3 这一条件的单词:

public static List<string> ShortWords(List<string> wordList) {
  List<string> shortWordList = new List<string>();
  int maximumWordLength = 3;
  foreach(string word in wordList) {
   if(word.Length <= maximumWordLength) {
    shortWordList.Add(word);
   }
  }
  return(shortWordList);
}

使用 LINQ 可以更加高效地实现类似功能,如以下代码段所示:

public static List<string> ShortWords(List<string> wordList) {
  var maximumWordLength = 3;
  return wordList.Where(w => w.Length <=
    maximumWordLength).ToList<string>();
end

用 IronRuby 等动态语言实现该方法(Microsoft .NET Framework 的 Ruby 实现)类似于在 C# 中使用 LINQ 方法,但比传统方法简短得多:

def ShortWords(wordList)
  maximumWordLength = 3
  return wordList.select {|w| w.Length <= maximumWordLength}
end

只要对比一下上述算法的这两种实现,就可对 IronRuby(以及其他动态语言)有不少了解。IronRuby 代码非常简洁,不包含任何数据类型关键字(如 string 或 int)。

此 IronRuby 代码块中,最令人感兴趣的是花括号之间的闭包。这里的闭包实际上是一个函数,它被传递给 Select 方法。Select 方法使用闭包提取集合的子集。构成该闭包的代码实际在 Select 方法内执行(此处,闭包提取集合 wordList 中符合条件的字符串),但保留对其原始作用域中的变量(在本示例中,即 maximumWordLength 变量)的访问权限。

闭包的功能非常强大,此简单示例仅作演示之用。闭包类似于在 C# 中使用 LINQ 或向 Exists 或 Find 方法传递委托,此外,闭包还有一个优点,可保留对其原始作用域的访问权限。有关闭包的详细信息,请参阅我与 Jeff Scanlon 合著的“Accelerated Silverlight 3”(Apress,2009 年 7 月)一书。

Silverlight编程模型、XAML和HTML DOM

Silverlight对象树

Silverlight中如何为浏览器外应用程序实现

Silverlight中如何为浏览器外支持配置应用

使用LINQ和ADO.NET创建Silverlight程序