26

Ruby 尖/数字符号/磅/哈希(#) 符号的各种含义是什么

#Ruby中的符号有多少个上下文?

我知道#`代表评论

# a comment

或“转换为值”:

i = 1
print "#{i}" # simple example

但是我也看到一些 Ruby 文档描述了这些内置方法:

Array#fill
File::file?

为什么他们用 2 个不同的符号来描述同一件事?我是 Ruby 的新手。谢谢

4

4 回答 4

16

这是实例方法描述的方式:

Array#fill 

这样你就可以:

a = Array.new(2)
 => [nil, nil]
a.fill(42)
 => [42, 42]

这是方法的描述方式:

String::new

s = String.new('abc')
 => "abc"
于 2013-09-03T12:15:25.760 回答
10

在 Perl 中,# 用于注释,并且由于 Perl 是 Ruby 的“祖先”,所以这个角色被继承了。

语法称为“"#{}"插值”,最有可能选择英镑是因为插值在某种意义上类似于注释,因为您正在更改代码的上下文(在这种情况下为另一个执行上下文)

类名后面的 # 仅表示以下标识符是该类的方法,并且只是一个约定。在此处阅读有关它的更多信息:为什么 Ruby 文档中的方法前面有井号?

于 2013-09-03T12:12:03.057 回答
2

有趣的::是,它的作用类似于.你可以通过两者调用方法

Car::is_hybrid?

car.is_hybrid?

正如您将在大多数代码中看到的那样,尽管.方法是首选。

通常首选的一种情况::是您在类中有常量,您将在系统调用(例如Math::PI或您创建的系统调用)中看到这一点,例如ThePentagon::NUMBER_OF_BUILDING_SIDES

于 2013-09-03T12:42:09.397 回答
1

只是为了向您展示一个示例,Ruby 显示了以符号开头的实例方法和以符号 开头的#类方法.

class Foo
  def self.foo;end
  def bar;end
end

p Foo.method(:foo) # => #<Method: Foo.foo>
p Foo.new.method(:bar) # => #<Method: Foo#bar>
于 2013-09-03T12:41:57.780 回答