开发环境中的折叠视图转让专利

申请号 : CN201380032857.5

文献号 : CN104380249B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : A·C·布拉东

申请人 : 微软技术许可有限责任公司

摘要 :

本发明所描述的主题的各方面涉及开发环境的折叠视图。在各方面,软件开发环境可以显示包括对其他代码段或其他数据的引用的代码段。开发人员可以选择引用并指示要为与该引用相对应的数据示出折叠视图。作为响应,软件开发环境可以获得与该折叠视图相对应的数据并与该代码段内联地显示该数据。

权利要求 :

1.一种至少部分地由计算机实现的方法,所述方法包括:在软件开发环境的图形界面上显示程序的第一代码段;

接收指示对所述程序的第二代码段的引用的输入;

在所述图形界面上,与所述第一代码段内联地显示所述第二代码段的折叠视图;以及在所述图形界面上,与所述第一代码段内联地显示包括所述第一代码段的变化历史的文本和其他数据的折叠视图。

2.如权利要求1所述的方法,其特征在于,还包括接收显示所述第二代码段的输入并且作为响应与所述引用内联地显示所述第二代码段的至少一部分并且从所述第一代码段的页边距缩进。

3.如权利要求2所述的方法,其特征在于,还包括在所述第二代码段的所述部分内显示由所述第二代码段引用的第三代码段的另一折叠视图。

4.如权利要求1所述的方法,其特征在于,还包括在所述图形界面上,与所述第一代码段内联地显示多个图形元素,所述图形元素中的每一个表示多个代码段之一的折叠视图。

5.如权利要求1所述的方法,其特征在于,还包括接收搜索输入并且作为响应首先搜索第一代码段中在所述第二代码段之前的一部分,随后搜索所述第二代码段,再后搜索所述第一代码段中在所述第二代码段之后的一部分。

6.一种方法,包括:

在软件开发环境的图形界面上显示程序的第一代码段;

接收标识所述第一代码段的文本的输入;

获得与所述文本相对应的数据;以及

在所述图形界面上,与所述文本内联地显示所述数据的折叠视图,其中所述数据包括由所述第一代码段引用的图像。

7.如权利要求6所述的方法,其特征在于,还包括通过在所述文本的下方且附近显示表示所述折叠视图的图形元素来显示所述图形元素,使得所述图形元素与所述第一代码段内联地显示。

8.如权利要求6所述的方法,其特征在于,显示所述数据的折叠视图包括进一步显示以下中的一个或多个:第二代码段或文本。

9.一种在计算环境中的系统,包括:

能用于接收针对软件开发活动的输入的软件开发环境,所述软件开发环境包括:用于呈现与软件程序的第一代码段相关联的文本的显示器,用于接收与所述第一代码段相关的编辑指令的源代码编辑器,以及用于使得所述显示器在紧靠在所述第一代码段中包括的引用下面呈现表示所述引用所引用的第二代码段的折叠视图的图形元素的折叠视图管理器,所述折叠视图管理器进一步能用于显示在所述第一代码段最后一次被执行时生成的表数据。

10.如权利要求9所述的系统,其特征在于,所述源代码编辑器对编辑指令进行响应,以便涉及紧靠在所述引用下面的代码的编辑指令在被应用于所述第一代码段中在所述图形元素下方的任何部分之前,被应用于所述第二代码段。

说明书 :

开发环境中的折叠视图

[0001] 背景
[0002] 在开发软件时,软件开发人员通常在包括该软件的代码的各文件之间导航。例如,开发人员可能打开一个文件、查看代码、发现该代码调用另一文件中的代码、打开该另一文件、导航到该代码、查看该代码、发现它调用又一文件中的代码,以此类推。以此方式导航是麻烦且耗时的。
[0003] 在此要求保护的主题不限于解决任何缺点或仅在诸如上述环境中操作的各个实施例。相反,提供该背景仅用以示出在其中可实践在此描述的部分实施例的一个示例性技术领域。
[0004] 概述
[0005] 简言之,本发明所描述的主题的各方面涉及开发环境的折叠视图。在各方面,软件开发环境可以显示包括对其他代码段或其他数据的引用的代码段。开发人员可以选择引用并指示要为与该引用相对应的数据示出折叠视图。作为响应,软件开发环境可以获得与该折叠视图相对应的数据并与该代码段内联地显示该数据。
[0006] 提供本概述是为了简要地标识在以下详细描述中进一步描述的主题的一些方面。本概述并不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
[0007] 除非上下文清楚地指出,否则短语“本发明所描述的主题”指的是具体实施方式中描述的主题。术语“方面”应被当作“至少一个方面”。标识具体实施方式中所描述的主题的各方面不旨在标识所要求保护的主题的关键特征或必要特征。
[0008] 上述各方面和本发明所描述的主题的其它方面是作为示例说明的,并且不受附图限制,附图中相似的参考标号指示相似的元素。

附图说明

[0009] 图1是表示本文所描述主题的各方面可以在其中操作的示例性系统的框图;
[0010] 图2-7是根据本文所描述的主题的各方面的在示例性图形界面中示出的示例性数据的框图;
[0011] 图4-7是根据本文所描述的主题的各方面的附加示例性用户界面窗口的框图;以及
[0012] 图8-9是根据本文所描述的主题的各方面的概括地表示可发生的示例性动作的流程图。

具体实施方式

[0013] 定义
[0014] 如本文所使用的,术语“包括”及其变体被当作开放式术语,表示“包括但不限于”。除非上下文另外清楚地指示出,否则术语“或”被当作“和/或”。术语“基于”被当作“至少部分地基于”。术语“一个实施例”和“一实施例”被当作“至少一个实施例”。术语“另一实施例”被当作“至少一个其他实施例”。
[0015] 如本文所使用的,诸如“一”和“该”等术语包括了所指示的项或动作中的一个或多个。具体而言,在权利要求书中,对某一项的引用一般表示存在至少一个这样的项,并且对一动作的引用表示执行该动作的至少一个示例。
[0016] 本文中有时可使用术语“第一”、“第二”、“第三”等等。没有其他上下文,权利要求中对这些术语的使用不意在暗示排序,而是用于标识的目的。例如,短语“第一版本”和“第二版本”不一定意味着第一版本是真正的第一个版本或是在第二版本之前创建的,或甚至是第一版本是在第二版本之前被请求或操作的。相反,这些短语用于标识不同的版本。
[0017] 本文所使用的术语“函数”可被认为是执行一个或多个任务的代码部分。虽然函数可包括返回数据的代码块,但它不限于返回数据的代码块。函数还可执行特定任务而不返回任何数据。此外,函数可以或可以不具有输入参数。函数可包括子例程、子程序、过程、方法、例程等。因而,在使用术语函数时,在替换实施例中,词语函数将被以上术语中的每一个所替换。
[0018] 如本发明所使用的计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息的任何方法或技术来实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括:RAM、ROM、EEPROM、固态存储、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、磁盒、磁带、磁盘存储或其它磁存储设备、或可以用来储存所期望的信息并可由计算机访问的任何其它介质。计算机存储介质不包括通信介质。
[0019] 标题仅是为了方便;关于给定话题的信息可在其标题指示该话题的章节之外被寻找到。
[0020] 其他显式或隐式定义可包括在下文中。
[0021] 示例性实施例
[0022] 图1是表示本文所描述主题的各方面可以在其中操作的示例性系统的框图。图1中示出的各组件是示例性的且不意味着包括一切的可能需要或包括的组件。在其他实施例中,结合图1描述的组件和/或功能可被包括在其他组件(示出或未示出)中或者被放置在子组件中而不背离本文所描述的主题的各方面的精神或范围。在一些实施例中,结合图1描述的组件中的一个或多个可跨可彼此靠近(例如,局域网上)或分散开(例如,在因特网上的不同地方)的多个设备分布。
[0023] 本发明所描述的主题的各方面可与通用或专用计算系统环境或配置实现。可适用于本发明所述的主题的各方面的计算机包括个人计算机、服务器计算机(无论是裸金属还是作为虚拟机)、手持或膝上型设备、多处理器系统、基于微控制器的系统、机顶盒、可编程和不可编程消费电子设备、网络PC、小型计算机、大型计算机、个人数字助理(PDA)、游戏设备、打印机、包括机顶盒、媒体中心或其它电器的家电设备、嵌入汽车或附连到汽车的计算设备、其他移动设备、包括蜂窝电话、无线电话和有线电话的电话设备、包括任何上述系统或设备的分布式计算环境等等。
[0024] 本发明所述的组件中的一个或多个可在虚拟环境中操作。虚拟环境是由计算机来模仿或模拟的环境。虚拟环境可模仿或模拟物理机器、操作系统、一个或多个接口的组、以上各项的部分、或以上各项的组合等等。在机器被模仿或被模拟时,该机器有时被称为虚拟机。对于在虚拟机上执行的软件来说,虚拟机是一种看上去是物理机器的机器。该软件可将文件保存在诸如虚拟硬盘驱动器、虚拟软盘等之类的虚拟存储设备中,可从虚拟光学设备读取文件,可经由虚拟网络适配器来进行通信等等。
[0025] 虽然本文的讨论中的一些引用了软件开发系统,但本文的教导也可适用于其他环境,如文字处理程序、浏览器、或其他环境。例如,在文字处理程序中,文档的一部分可以引用在文档的另一部分中或甚至在另一文档中找到的文本、图形、或其他数据。在这一示例中,折叠视图可被提供以示出该文本、图形或其他数据。作为另一示例,浏览器可显示引用其他数据的超链接。在这一示例中,其他数据可被获得并在折叠视图中示出。
[0026] 在一个示例中,图1所示的组件中的一个或多个或可由这些组件访问的组件可被托管在云中。云是经常被用作因特网的暗喻的术语。这利用了这样的理念,即计算、软件、数据存取、存储、以及其它资源可由连接到因特网的实体来提供而无需用户知晓与递送那些资源的计算体系结构有关的位置或其它细节。
[0027] 上述例子并不旨在是包括一切的或是穷举的。事实上,基于本文的教导,本领域技术人员可认识到,可以应用本文的教导中的许多其他环境而不背离本文所描述的主题的各方面的精神或范围。
[0028] 转向图1,软件开发系统105可包括开发组件110、显示器115、通信机制120、和其它组件(未示出)。开发组件110可包括源代码编辑器125、获取管理器130、折叠视图管理器135和其它组件(未示出)。如本发明所使用的那样,术语“组件”要被当作包括以下的全部或一部分来理解:一个或多个设备、一个或多个软件模块或其部分的集合、一个或多个软件模块或其部分与一个或多个设备或其部分的某种组合等等。
[0029] 软件开发环境105可操作来接收用于软件开发活动的输入。软件开发活动可包括开发人员可采取以创建、修改、测试、编译、调试、测量、或以其他方式与软件进行交互的任何活动。
[0030] 通信机制120允许软件开发系统105的各组件与软件开发系统105外部的其他组件通信。例如,通信机制120可以允许与代码服务器、隐错跟踪数据库、文件服务器、另一实体等进行通信。通信机制120可以是网络接口或适配器、调制解调器、或用于建立通信的任何其他机制。
[0031] 显示器115是可被用来以视觉方式显示数据的输出设备。显示器可以实现或作为图形界面的一部分,软件开发人员通过该图形界面可以查看代码和与该代码有关的信息。图形界面可以显示文本、图标、像素、控件、其他图形元素等。在另一实施例中,其他输出设备可被使用,如下文更详细地描述的自然用户界面。
[0032] 获取管理器130可操作来获得与折叠视图相对应的代码或其他数据。在一个实现中,在表示折叠视图的图形元素被显示在显示器115上时,获取管理器130可以获得代码或其他数据。在另一实现中,获取管理器130可以响应于接收到折叠视图要被展开的指示(例如,鼠标点击或其他输入)来获得代码或其他数据。
[0033] 源代码编辑器125可操作来接收与代码相关的编辑指令。可经由源代码编辑器125来编辑的代码和其他数据的一些示例包括图2-7中所示的那些。
[0034] 图2-7是根据本文所描述的主题的各方面的在示例性图形界面中示出的示例性数据的框图。转向图2,在一个示例中,窗口200可包括菜单205、窗格215、以及其他元素。
[0035] 一般而言,元素(有时称为控件)可包括零个或更多个其他元素。例如,元素可包括零个或更多个其他元素,该其他元素可包括零个或更多个其他元素,以此类推。此外,将明白,窗口200可具有可按各种方式来安排的更多、更少、或其他元素,而不背离本文所描述的主题的精神或范围。
[0036] 如图2所示,菜单205可包括诸如文件、编辑、查看以及所需的其他菜单项等菜单项。选择菜单项可使得子菜单出现,子菜单提供可从中选择的附加菜单项。子菜单中的菜单项可使得附加的子菜单出现,以此类推。
[0037] 窗格315显示软件开发环境的程序的代码段。代码段包括一行或多行代码。在一个示例中,方法GetPeople 220被下划线突出显示。在其他示例中,其他形式的突出显示可被使用,如加粗、不同颜色、闪烁、不同大小或字体、以及在文本附近放置图标,等等。在一个实施例中,方法GetPeople 220不被突出显示。
[0038] 方法GetPeople 220可能在该程序中其他位置的代码段中定义。其他位置可包括例如在同一或不同文件、类、方法、代码储存库等中的另一位置。编辑器可以接收指示方法GetPeople 220要在折叠视图中示出的输入。例如,软件开发人员可以在GetPeople文本之上或附近点击。
[0039] 有时,在本文中提到术语鼠标点击、悬停、键盘或某一其他输入,但要理解,任何其他形式的输入可替换以上动作而不背离本文所描述的主题的各方面的精神或范围。
[0040] 例如,在一个实施例中,自然用户界面(NUI)可被用来提供输入。NUI可依赖于语音识别、触摸和指示笔识别、屏幕上和邻近该屏幕两者的姿势识别、空中姿势、头和眼睛跟踪、语音和话音、视觉、触摸、姿势、机器智能等等。可被用来与用户交互的一些示例性NUI技术可包括触敏显示器,话音和语音识别,意图和目的理解,使用深度相机(如立体相机系统、红外相机系统、RGB相机系统、以及这些的组合)的运动姿势检测,使用加速度计/陀螺仪的运动姿势检测,面部识别,3D显示,头部、眼睛和注视跟踪,沉浸式增强现实和虚拟现实系统,以及用于使用电场传感电极(EEG和相关方法)的传感大脑活动的技术。
[0041] 在编辑器接收到输入后,编辑器可以与折叠视图管理器进行交互以获得方法GetPeople 220的折叠视图。方法GetPeople 220的折叠视图在图3中示出。在图3中,窗口300包括窗格315,其中折叠视图325与包括方法GetPeople的代码段内联在一起。折叠视图
325可被缩进和/或具有帮助指示折叠视图325的图形元素(例如,线330)。
[0042] 为了获得在折叠视图325中示出的代码段,折叠视图管理器可以从包括该代码段的另一文件或储存库获得该代码段。本领域技术人员将明白,具有如图3中示出的折叠视图允许软件开发人员在无需经过麻烦的一组步骤来定位被调用的代码、加载该代码、以及查看该代码的情况下查看该代码。此外,折叠视图还可允许软件开发人员在无需软件开发人员在多个屏幕之间导航的情况下查看进行调用的代码段和被调用的代码段两者。
[0043] 虽然折叠视图在本文有时被描述为包括代码段,但在其他实施例中,折叠视图可包括其他数据。例如,折叠视图可包括指示代码的变化历史的文本和其他数据(例如,参见图7)。在另一示例中,折叠视图可包括诸如由代码引用的图像等图形。
[0044] 作为另一示例,折叠视图可包括在该代码最后一次被执行时生成的表数据。作为又一示例,折叠视图可包括与代码相关联的文档。
[0045] 折叠视图可以跨不同编程语言的代码的各视图。例如,一些HTML代码可以引用JavaScript代码。JavaScript代码可在折叠视图中示出。JavaScript代码可以引用服务器上的C#代码。来自服务器的C#代码可以在折叠视图中与JavaScript代码中的调用引用内联地示出。C#代码可以调用某一Basic代码,该Basic代码可在又一折叠视图中与C#代码中的调用引用内联地示出。这可针对用不同编程语言编写的任何数量的代码段来重复。
[0046] 折叠视图可以由允许软件开发人员展开或折起折叠视图的图形元素来表示。图形元素可包括图标、突出显示的字符、文本行、方法、变量、或其他名称、或其他图形数据、以上两者或更多者的组合,等等。例如,图5示出一行或两行文本来表示与方法GetPeople相对应的每一折叠视图。通过点击各行文本中的一行,软件开发人员可以使得与该文本相关联的代码段与其他代码内联地显示。折起折叠视图可以使得任何未被折起的子视图也被折起。
[0047] 一个代码段可以是一个或多个折叠视图的父代码段,这些折叠视图可包括能作为一个或多个其他折叠视图的父代码段的代码段,以此类推。这一点的一些示例在图4和6中示出。
[0048] 诸如变量等符号可以使用静态或运行时技术跨各折叠视图相关。符号对应关系随后可跨各视图来被突出显示。例如,如果变量X被传递给单参数函数并且该参数的名称是Y,则Y的所有实例在子方法中以及在通过从该子方法折叠的代码展开的任何其他子方法中可被自动突出显示。这允许软件开发人员容易地标识跨复杂、分层的调用树的值流。这一点的示例在图6中示出,其中变量DateAdded被加粗且跨各折叠视图相关。
[0049] 返回图2,如上所述,取决于实现,方法GetPeople 220可被突出显示或不被突出显示。在一个示例中,响应于接收到与方法GetPeople 220相关联的悬停输入,附加信息可被显示。例如,与被引用的代码段有关的元数据可被显示。例如,所显示的元数据可包括名称、父类、文件名、图形图像的大小、代码段的创建时间、用于编码图像的编码方案、其他元数据,等等。
[0050] 此外,折叠视图可与在程序执行时可作出的调用序列紧密地匹配。例如,如果函数A调用函数B,函数B调用函数C,则折叠视图可以示出函数B折叠在函数A中且函数C折叠在函数B内,位置与代码被调用的地方相对应。
[0051] 要由折叠视图示出的代码段可以大于在折叠视图中显示所允许的代码段。例如,代码段可具有过宽而不能显示在折叠视图中的代码行。在另一示例中,代码段可具有超过可在折叠视图中显示的代码行阈值的代码行。在这种情况下,折叠视图管理器可以显示指示比示出的内容更多的内容可用的一个或多个图形元素(例如,省略号、滚动条、其他图形元素等)。这些图形元素在本文中有时被称为省略标记。
[0052] 软件开发人员可以点击或以其他方式与省略标记交互以使得更多内容被显示。作为响应,多达另一阈值的更多代码段可与附加省略标记一起显示。软件开发人员可以继续与省略标记交互来使得附加的代码段部分被显示,直至所需量的代码段或整个代码段被显示。
[0053] 在一个实现中,软件开发人员可允许以下选项:“扯下”一代码段并在传统文件编辑器中作为顶层用户界面中的新标准选项卡、窗口、或其他元素来打开它。在这一实现中,在代码段被扯下时,代码段的起始行可以显示在该图形元素中。
[0054] 使用折叠视图显示代码段的界面可被实现为与经由开发环境可用的现有交互相一致。例如,撤消操作可以撤消屏幕上可见的最后动作。作为另一示例,查找下一处命令可以按遇到它们的次序来找出被搜索文本的下一实例——包括或不包括折叠视图(例如,取决于配置)。作为又一示例,滚轮和垂直滚动条可以管理视口(viewport)。作为又一示例,保存操作可以保存编辑器的底层缓冲区。
[0055] 以上示例只是示例性的且不旨在是全包括或穷尽折叠视图可与经由开发环境可用的现有交互相一致的方式。基于本文的教导,本领域技术人员可以认识到实现以与经由开发环境可用的现有交互相一致的方式使用折叠视图显示代码段的界面的其他方式,而不背离本文描述的主题的各方面的精神或范围。
[0056] 在一个示例中,返回图1,源代码编辑器125可以对编辑指令作出响应,使得将涉及紧靠在对折叠视图的引用下面的代码的编辑指令在被应用于在图形元素之下的代码段的任何部分之前,被应用于折叠视图的代码段。例如,参考图3,搜索单词“arraylist(数组列表)”可以搜索折叠视图325上方的代码段,随后搜索折叠视图325的代码段,再后搜索折叠视图325下方的代码。
[0057] 图8-9是根据本文所描述的主题的各方面的概括地表示可发生的示例性动作的流程图。为解释简明起见,结合图8-9描述的方法被描绘和描述为一系列动作。可以理解和明白,本发明所描述的主题的各方面不受所示出的各动作和/或各动作次序的限制。在一个实施例中,各动作以如下描述的次序发生。然而,在其它实施例中,各动作可以并行地发生、以另一次序发生、和/或与本发明未呈现和描述的其它动作一起发生。此外,并非所有示出的动作都是实现根据本发明所描述的主题的各方面的方法所必需的。另外,本领域的技术人员将了解和明白,该方法也可以替代地经由状态图而被表示为一系列相互关联的状态或者被表示为事件。
[0058] 转向图8,在框805处,动作开始。
[0059] 在框810,获得第一代码段。例如,参考图1,软件开发人员可以使用源代码编辑器125选择代码文件并且使得该代码文件的代码被加载到存储器中并显示在显示器115上。
[0060] 在框815,第一代码段被显示在软件开发环境的图形界面上。例如,参考图1和2,窗格215中示出的代码段可被显示在显示器115上。
[0061] 在框820,可接收指示对第二代码段的引用的输入。如上所述,第二代码段可被包括在包含第一代码段的文件或其他储存库中或被包括在分开的文件中。例如,参考图1和2,软件开发系统105可接收右击、悬停、或标识方法GetPeople 220的其他形式的输入。例如,软件开发人员可以突出显示方法GetPeople 220以指示要由折叠视图表示的第二代码段的名称。
[0062] 在框825,显示表示第二代码段的图形元素。例如,参考图2,方法GetPeople220被加下划线以指示方法GetPeople 220与可表示在折叠视图中的其他代码相关联。作为另一示例,参考图5,为每一折叠视图示出一行或两行以指示与方法GetPeople相关联的其他代码。
[0063] 在框830,接收展开折叠视图的指令。例如,参考图2,软件开发人员可以右击方法GetPeople 220并指示该方法的代码要被展开并内联地示出。
[0064] 在框835,获得第二代码段的代码。例如,参考图1,获取管理器130可以通过打开文件并将代码加载到存储器来获得第二代码段的代码。
[0065] 在框840,显示第二代码段的至少一部分。例如,参考图3,GetPeople方法的整个代码被显示,但在图4中,对于每一折叠视图只有部分代码段被显示。
[0066] 在框845,执行其他动作(如果有的话)。例如,软件开发人员可以通过对软件开发系统的输入来指示折叠视图要被扯下。作为响应,代码段可被显示在分开的显示区域(例如,新选项卡、窗口、或其他元素)。
[0067] 作为另一示例,可以接收与第二代码段相关联的悬停输入。作为响应,可以显示与第二代码段相关的元数据。
[0068] 转向图9,在框905处,动作开始。在框910,显示程序的代码段。例如,参考图2,代码段被显示在窗格215中。
[0069] 在框915,接收标识代码段的文本的输入。例如,参考图2,软件开发人员可以点击方法GetPeople 220。作为另一示例,接收标识第一代码段的文本的输入可包括接收标识与该数据相关联的名称的输入。
[0070] 在框920,获得与该文本相对应的数据。例如,参考图3,可获得与在折叠视图325中示出的代码相对应的数据。作为另一示例可,如果该文本引用图形图像,则与该图像相对应的数据可被获得。
[0071] 在框925,与该文本内联地显示数据的折叠视图。显示该数据可包括显示以下中的一个或多个:第二代码段、文本、或图形。例如,参考图3,折叠视图325与对people.GetPeople(1)的调用内联地显示。作为另一示例,如果该文本引用图形图像,则该图形图像可以与该文本内联地示出。
[0072] 在框930,可以执行其他动作(如果有的话)。例如,可以显示表示折叠视图的图形元素。这一图形元素可以在该文本的下方且附近显示,使得图形元素与第一代码段内联地显示。图形元素可以允许软件开发人员提供展开输入(例如,通过选择、悬停、点击或以其他方式与该图形元素交互)。响应于接收到展开输入,与该图形元素相对应的数据可被显示并且从代码段的页边距缩进。
[0073] 如从上述详细描述中可以看见,已经描述了与开发环境的折叠视图相关的各方面。尽管本文所描述的主题的各方面易于作出各种修改和替换构造,但其某些说明性实施例在附图中示出并在上面被详细地描述。然而,应当理解,并不旨在将所要求保护主题的各方面限制于所公开的具体形式,而是相反地,目的是要覆盖落入本文所描述的主题的各方面的精神和范围之内的所有修改、替换构造和等效方案。