2016-04-01 49 views
-2

我偶然发现了配额中的this article,并看到这段代码被剪掉了。但是,我找不到关于它的很多信息。

def Ke(x) 
    "called Ke with param #{x}" 
end 

$ Ke 'sha' 
=> "Called Ke with param sha" 

$ Ke$ha 
=> "Called Ke with param " 

$ Ke$overwhaterver 
=> "Called Ke with param " 

为什么叫Ke$ha调用的函数Ke(x),但它也忽略x参数?

+1

很确定这样的事情之前已经被问过了,但Stack Overflow似乎无法搜索'$'...> _ < – Carpetsmoker

+0

@Carpetsmoker是啊,似乎是这样。也许这是downvote的原因? – Azuan

回答

4

With $您可以访问全局变量。 Ruby会自动添加括号。这与使用Ke($ha)Ke $ha相同。

全局变量总是可以被引用而没有错误;他们默认为nil

$zxC# => nil 
$zxc = 'asd' 
$zxC# => "asd" 

参数$ha不是“忽视”,这是nil,并nil.to_s是一个空字符串。

+0

,为什么我们不需要在'Ke'和'$ ha'之间放置空格? – Azuan

+0

@Azuan Ruby的解析器非常灵活。由于'$'只能出现在全局变量的开头,因此它“知道”一个新的令牌开始。将与未初始化的实例var相同:'Ke @ x#=> nil' –