2010-11-04 194 views
0

对于nooby的随机rails/ruby​​问题,非常感谢。什么“?”做?什么是__FILE__?

混淆了第二个'?'意味着该行:

@page ||= params[:page].blank? ? 1 : params[:page].to_i 

在init.rb文件,这是什么FILE做真的吗?

require File.join(File.dirname(__FILE__), "rails", "init") 
+3

如果你有两个独立的问题,让他们在单独的问题中,即使它们看起来微不足道。 – 2010-11-04 23:08:46

回答

7

第一个?是方法名称的一部分,这是一种用于返回布尔结果的方法的约定。

第二?是内联有条件的经营者:

a ? b : c 

相当于

if a then 
    b 
else 
    c 
end 

__FILE__是一个内核函数返回当前文件的文件名。 File.dirname(__FILE__)将只返回目录名当前文件,并File.join相同Array#join与OS特定的目录分隔符(/在Linux/OSX和\在Windows上)

+0

所以它加入.../init_folder/rails和../init_folder/init或? – Blankman 2010-11-04 14:24:52

+3

并非如此......结果将是'/ init_folder/rails/init'。例如,'File.join(“我的”,“非常”,“深”,“文件夹”)将导致到'/ my/very/deep/folder'或'\ my \ very \ deep \取决于操作系统。 – Voldy 2010-11-04 15:02:09

3

1)这是一个三元表达,将第二个问号基本上是“然后”,意思是实质上的“else”之后它结肠。整个事情可以改写:

if params[:page].blank? 
    1 
else 
    params[:page].to_i 
end 

2)__FILE__是对当前文件的引用,在这种情况下init.rb

+0

啊,所以第一?只是方法名称的一部分,没关系。 – Blankman 2010-11-04 14:23:49

+0

是,'blank?'是完整的方法名称。 – William 2010-11-04 14:56:05

+0

+1使用正确的术语'三元'。只是一个小小的修正:它被称为'三元运算符'而不是'三元运算符'。 – Zabba 2010-11-09 07:42:45