Ruby =>运算符

ari*_*nte 12 ruby syntax

我在哪里可以找到=>操作符在Ruby中的含义的解释?

例如,

class Acct < ActiveRecord::Base
  validates_confirmation_of :password, :email_address, :on => :create
end
Run Code Online (Sandbox Code Playgroud)

=>在这种情况下,运营商在做什么?

Mil*_*ota 20

符号"=>"不是运算符.它只是一种语法手段来表达其他两个元素之间存在"键值"的关系.它用于定义散列(或关联数组,因为它们在其他一些语言中被调用,例如PHP).从这个意义上说,因为"=>"它不是一个运算符,它不会做任何事情(因此符号"["和"]"在用于定义数组时不做任何事情).如果您仍然感到困惑,请查看Hash Ruby类并将其与Array类进行比较.


Dig*_*oss 9

" Hash Rocket "语法

符号不是运算符,只是用于定义文字哈希对象的语法的一部分.它通常被称为哈希火箭.

通常,文字哈希对象的定义如下:

a = { :x => 1, :y => 2 } # same thing as: a = Hash.new; a[:x] = 1; a[:y] = 2
Run Code Online (Sandbox Code Playgroud)

它当然可以传递给一个方法:

def f(x); end; f({:x => 1, :y => 2})
Run Code Online (Sandbox Code Playgroud)

实际上,当散列作为方法的最后一个参数传递时,{}可以删除对象文字的一部分:

f(:x => 1, :y => 2)
Run Code Online (Sandbox Code Playgroud)

parens也是可选的,所以我们得到的结果如下:

f :x => 1:, :y => 2 # and of course...
validates_confirmation_of :password, :email_address, :on => :create
Run Code Online (Sandbox Code Playgroud)

最后(仅在现代Ruby中)对于散列键是符号的特定情况,您可以写入key : value,因此:

f x: 1, y: 2 # not to mention...
validates_confirmation_of :password, :email_address, on: :create
Run Code Online (Sandbox Code Playgroud)

请注意,方法调用可以在类定义中进行.它们像任何其他方法调用一样执行,但在定义时.它们对于像Rails这样的软件包特别有用,它可以进行大量的元编程,以扩展其应用程序域的语言和库对象.


Ori*_*rds 7

要扩展已接受的答案(它不是运算符),请基本上以与逗号相同的方式来考虑它.

{ "foo" => "bar", "a" => "b" }
Run Code Online (Sandbox Code Playgroud)

逗号分隔散列中的每一对,=>分隔键和对内的值.