关于语法:::和之间有区别吗? 在Ruby中调用类方法时?

关于语法:::和之间有区别吗? 在Ruby中调用类方法时?

Is there a difference between :: and . when calling class methods in Ruby?

这是一个简单的问题,但是我一直很好奇...下面两个命令之间在功能上有区别吗?

1
2
String::class
String.class

它们都符合我的期望-也就是说它们返回Class-但是使用::.有什么区别?

我注意到在那些定义了常量的类上,当您在::之后而不是在.之后按tab时,IRB的自动完成功能会将常量作为可用选项返回,但是我不知道这是什么原因。 ..


.运算符基本上说"将该消息发送给对象"。在您的示例中,它正在呼叫该特定成员。 ::运算符"向下钻取"到在运算符左侧定义的范围,然后调用在运算符右侧定义的成员。

使用::时,必须引用已定义的成员。使用.时,您只是向对象发送一条消息。由于该消息可能是任何内容,因此自动完成功能不适用于.,而适用于::


实际上,自动完成功能确实适用于.。通过在对象上调用#methods可以找到完成选项。您可以通过覆盖Object.methods自己看到它:

1
2
3
4
5
>> def Object.methods; ["foo","bar"]; end
=> nil
>> Object.[TAB]
Object.foo  Object.bar
>> Object.

请注意,这仅在.左侧的表达式为文字时有效。否则,让对象调用#methods将涉及评估左侧,这可能会有副作用。您也可以自己查看:

1
2
3
4
5
[continuing from above...]
>> def Object.baz; Object; end
=> nil
>> Object.baz.[TAB]
Display all 1022 possibilities? (y or n)

我们向Object添加方法#baz,该方法本身返回Object。然后,我们自动完成以获取可以在Object.baz上调用的方法。如果IRB调用Object.baz.methods,它将得到与Object.methods相同的效果。相反,IRB有1022条建议。我不确定它们来自哪里,但是显然这是一个通用列表,实际上并不基于上下文。

::运算符(也)用于获取模块的常数,而.则不是。这就是HTTP将显示在Net::的补全中而不显示在Net.的原因中的原因。 Net.HTTP不正确,但Net::HTTP是正确的。


推荐阅读

    linux必须记忆的命令?

    linux必须记忆的命令?,工作,系统,地址,命令,信息,管理,目录,基础,网络,路径,L

    linux命令怎么编写?

    linux命令怎么编写?,系统,地址,工作,信息,命令,位置,环境,发行,标准,电脑,Lin

    程序执行linux命令?

    程序执行linux命令?,系统,工作,地址,环境,信息,管理,命令,文件,目录,程序,lin

    不常用的linux命令?

    不常用的linux命令?,工作,地址,系统,命令,信息,基础,网络,管理,标准,目录,Lin

    linux开启热点命令?

    linux开启热点命令?,网络,系统,地址,工具,信息,通用,管理,最新,工作,服务,在L

    linux命令替换后门?

    linux命令替换后门?,系统,数据,工具,平台,工作,检测,最新,管理系统,通信,商

    linux上获取网管命令?

    linux上获取网管命令?,地址,系统,网络,信息,电脑,服务,网关,状态,名字,中心,l

    gzlinux解压命令?

    gzlinux解压命令?,系统,管理,命令,工具,标准,文件,电脑,平台,格式,文件名,lin

    linux常用命令中wr?

    linux常用命令中wr?,地址,工作,系统,命令,信息,目录,管理,网络,常用命令,控

    linux数据库同步命令?

    linux数据库同步命令?,信息,系统,汽车,车辆,服务,工作,通信,一致,分析,数据,D

    linux打开子目录命令?

    linux打开子目录命令?,系统,命令,标准,设备,工作,名称,信息,管理,密码,传播,l

    linux命令刷新加载?

    linux命令刷新加载?,系统,下来,工具,网上,命令,终端,环境变量,以下,文件,路

    linux命令怎么控制的?

    linux命令怎么控制的?,地址,工作,系统,标准,命令,电脑,基础,管理,灵活,网站,l

    linux退出程序命令?

    linux退出程序命令?,档案,管理,系统,命令,编辑,进程,模式,文件,程序,指令,lin

    linux磁盘命令dm?

    linux磁盘命令dm?,信息,设备,地址,软件,系统,工作,公司,下来,数据,磁盘,linux

    linux默认命令删除?

    linux默认命令删除?,系统,软件,名称,档案,命令,文件,目录,不了,电脑,文件夹,

    linux中启动软件命令?

    linux中启动软件命令?,环境,软件,电脑,系统,工具,位置,代码,设备,时间,情况,

    linux开启log命令?

    linux开启log命令?,系统,信息,等级,实时,日志,一致,状态,环境,情况,命令,Linu

    linux链接远程命令?

    linux链接远程命令?,系统,地址,网络,密码,软件,名称,工具,服务,电脑,认证,如

    linux命令查的是啥?

    linux命令查的是啥?,系统,时间,信息,状态,命令,工具,名称,标准,软件,情况,Lin