基本的Ruby/Rails语法

5

我熟悉Java和C,并且对Ruby也有一定的了解,但有时候会被一些Ruby语法搞糊涂。

例如下面这行代码是什么意思?我想我们在调用一个函数protect_from_forgery(),但是with: :exception是什么意思呢?我猜:exception是一个哈希值(例如{ :exception => "NullPtr" }),但是with:又是什么呢?

protect_from_forgery with: :exception
2个回答

9

这一行代码中有很多语法糖。我认为让你困惑的是哈希和符号的缩写。如果你不熟悉符号,请参考这个好的教程

去掉所有的语法糖,这行代码可以写成:

protect_from_forgery({:with => :exception})

分解一下,即使没有大括号,最后一个传递给方法的参数也会被视为哈希。因此:

protect_from_forgery({:with => :exception})

等同于:

protect_from_forgery(:with => :exception)

当哈希表的键为符号时,可以通过将冒号放在单词末尾而不是开头来定义哈希表和键。例如:

protect_from_forgery(:with => :exception)

与下面的代码等价:

protect_from_forgery(with: :exception)

最后,Ruby中方法参数周围的括号是可选的。因此:
最后,Ruby中方法参数周围的括号是可选的。所以:
protect_from_forgery(with: :exception)

等同于:

protect_from_forgery with: :exception

1
请注意,JavaScript风格的“符号作为哈希键”表示法仅适用于某些符号。它无法使用像:$set:@var:'where is pancakes house?'这样的符号。 - mu is too short

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接