Ruby 有人能给我解释一下下面的代码吗?

Ruby 有人能给我解释一下下面的代码吗?,ruby,ternary-operator,Ruby,Ternary Operator,我将跟随Rails 3的行动手册,它将讨论模型中的覆盖。代码如下: def to_s "#{email} (#{admin? ? "Admin" : "User"})" end 我知道在Ruby中,你可以用{value}在双引号内显示一个值,但是双问号是怎么回事呢?这是个问题。{email}{admin??admin:User}等同于 email.to_s + " (" + (admin? ? "Admin" : "User") + ")" 就是 email.to_s + " (" +

我将跟随Rails 3的行动手册,它将讨论模型中的覆盖。代码如下:

def to_s
  "#{email} (#{admin? ? "Admin" : "User"})"
end
我知道在Ruby中,你可以用{value}在双引号内显示一个值,但是双问号是怎么回事呢?

这是个问题。{email}{admin??admin:User}等同于

email.to_s + " (" + (admin? ? "Admin" : "User") + ")"
就是

email.to_s + " (" + if admin? then "Admin" else "User" end + ")"

由于被括在引号中,在此上下文中,Admin和User用作字符串而不是常量。

此函数将返回电子邮件中的字符串,以及它们是Admin还是User。。。 即

所以电话

user_1.to_s 
将返回字符串

"test@email.com Admin"

第一个问题是rails中的属性查询方法

前提是您没有覆盖/重新定义该方法


这是一种查看该属性是否存在的速记方法。

实际上是admin?是否在控制器/助手方法或模型的某个地方定义了一个函数,该函数返回booleantrue或false,并且下一个问号类似于if条件

if admin? == true
 "Admin"
else
 "User"

前面的第一部分:用于true case,另一部分用于false case

不要将其视为双问号,第一个问号是方法名的一部分Ruby允许方法名以!,?,=,[]等。既然admin是一个布尔值,那么ActiveRecord是否添加一个admin?方法,如果用户是管理员,则返回true,否则返回false

另一个问号与冒号一起使用:您可以看到它如下所示:

condition ? statement_1 : statement_2
如果条件为true,则执行第一条语句,否则执行第二条语句


所以把这两件事放在一起,你有一个字符串连接,在括号之间添加Admin或User单词。

条件是什么?true_result:false_result语法被称为btw。您可以在大多数语言中找到它作为if。。。然后艾尔塞塔克斯!在继续之前,我肯定会阅读更多关于字符串插值的内容。听起来我应该更熟悉它。
condition ? statement_1 : statement_2