流行编程语言的详细对比(2)--包管理

来源:互联网 发布:手机查看电脑桌面软件 编辑:程序博客网 时间:2024/06/07 18:40

包管理

Java

定义包:
包语句的语法格式为:

package pkg1[.pkg2[.pkg3…]];

引用:

import package1[.package2…].(classname|*);

Js
定义包:

<script>    (function(){                  //自己的命名空间,外部无法访问。                  //定义了自己的函数$()                  Function $()                  {                      //代码。                      //测试是否成功。                      alert("你好!");                  }                  //构造自己的命名空间。                  Window['myNameSpace']={}                  //将自己的命名空间注册到window,并且注册自己的$函数。                  Window['myNameSpace']['$']=$;         })();  </script>

引用:

<html>  <head>      <title>js库测试</title>      <script type="text/javascript" src="myNameSpace.js"></script>  </head>  /*调用自己建立的 $()方法。window可以省略*/  <body onload="window.myNameSpace.$();">  </body>  </html>

Python

定义包:
包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的Python的应用环境。
在Phone目录下创建file init.py:
Phone/init.py
引用:
当你导入Phone时,为了能够使用所有函数,你需要在init.py里使用显式的导入语句,如下:

from Pots import Potsfrom Isdn import Isdnfrom G3 import G3

当你把这些代码添加到init.py之后,导入Phone包的时候这些类就全都是可用的了。

import Phone Phone.Pots()Phone.Isdn()Phone.G3()

Go
(1)package关键字定义包:
package xxx
(2)import(
“fmt”
)
然后我们代码里面可以通过如下的方式调用

fmt.Println(“hello world”)
上面这个fmt是Go语言的标准库,他其实是去goroot下去加载该模块,当然Go的import还支持如下两种方式来加载自己写的模块:

相对路径
import “./model” //当前文件同一目录的model目录,但是不建议这种方式来import

绝对路径
import “shorturl/model” //加载gopath/src/shorturl/model模块

(3)程序的初始化和执行都起始于main包。如果main包还导入了其它的包,那么就会在编译时将它们依次导入。有时一个包会被多个包同时导入,那么它只会被导入一次(例如很多包可能都会用到fmt包,但它只会被导入一次,因为没有必要导入多次)。当一个包被导入时,如果该包还导入了其它的包,那么会先将其它包导入进来,然后再对这些包中的包级常量和变量进行初始化,接着执行init函数(如果有的话),依次类推。等所有被导入的包都加载完毕了,就会开始对main包中的包级常量和变量进行初始化,然后执行main包中的init函数(如果存在的话),最后执行main函数。
1). 点操作
我们有时候会看到如下的方式导入包
import(
. “fmt”
)
这个点操作的含义就是这个包导入之后在你调用这个包的函数时,你可以省略前缀的包名,也就是前面你调
用的fmt.Println(“hello world”)可以省略的写成Println(“hello world”)
2). 别名操作
别名操作顾名思义我们可以把包命名成另一个我们用起来容易记忆的名字
import(
f “fmt”
)
别名操作的话调用包函数时前缀变成了我们的前缀,即f.Println(“hello world”)
3). _操作
这个操作经常是让很多人费解的一个操作符,请看下面这个import
import (
“database/sql”
_ “github.com/ziutek/mymysql/godrv”
)
_操作其实是引入该包,而不直接使用包里面的函数,而是调用了该包里面的init函数。

Scala
定义包:
Scala 使用 package 关键字定义包,在Scala将代码定义到某个包中有两种方式:
第一种方法和 Java 一样,在文件的头定义包名,这种方法就后续所有代码都放在该包中。 比如:
package com.runoob
class HelloWorld
第二种方法有些类似 C#,如:
package com.runoob {
class HelloWorld
}
第二种方法,可以在一个文件中定义多个包。

引用:
Scala 使用 import 关键字引用包。
import java.awt.Color // 引入Color

import java.awt._ // 引入包内所有成员

def handler(evt: event.ActionEvent) { // java.awt.event.ActionEvent
… // 因为引入了java.awt,所以可以省去前面的部分
}
import语句可以出现在任何地方,而不是只能在文件顶部。import的效果从开始延伸到语句块的结束。这可以大幅减少名称冲突的可能性。
如果想要引入包中的几个成员,可以使用selector(选取器):
import java.awt.{Color, Font}

// 重命名成员
import java.util.{HashMap => JavaHashMap}

// 隐藏成员
import java.util.{HashMap => , } // 引入了util包的所有成员,但是HashMap被隐藏了
注意:默认情况下,Scala 总会引入 java.lang._ 、 scala._ 和 Predef._,这里也能解释,为什么以scala开头的包,在使用时都是省去scala.的。

PHP

/*定义空间:*/namespace Foo\Bar\subnamespace; 1、使用use操作符导入/使用别名<?phpnamespace foo;use My\Full\Classname as Another;//下面的例子与 use My\Full\NSname as NSname 相同use My\Full\NSname;// 导入一个全局类use \ArrayObject;$obj = new namespace\Another; // 实例化 foo\Another 对象$obj = new Another; // 实例化 My\Full\Classname 对象NSname\subns\func(); // 调用函数 My\Full\NSname\subns\func$a = new ArrayObject(array(1)); // 实例化 ArrayObject 对象// 如果不使用 "use \ArrayObject" ,则实例化一个 foo\ArrayObject 对象?>2、 一行中包含多个use语句<?phpuse My\Full\Classname as Another, My\Full\NSname;// 实例化 My\Full\Classname 对象$obj = new Another; // 调用函数 My\Full\NSname\subns\funcNSname\subns\func(); ?>//导入操作是在编译执行的,但动态的类名称、函数名称或常量名称则不是。3、导入和动态名称<?phpuse My\Full\Classname as Another; // 实例化一个 My\Full\Classname 对象$obj = new Another;$a = 'Another'; // 实际化一个 Another 对象$obj = new $a;     ?>另外,导入操作只影响非限定名称和限定名称。完全限定名称由于是确定的,故不受导入的影响。4、导入和完全限定名称<?phpuse My\Full\Classname as Another;$obj = new Another; // instantiates object of class My\Full\Classname$obj = new \Another; // instantiates object of class Another$obj = new Another\thing; // instantiates object of class My\Full\Classname\thing$obj = new \Another\thing; // instantiates object of class Another\thing?>
原创粉丝点击