2015-12-16 31 views
9

我當時在滑軌控制檯中,意外地輸入了j這個字母,然後回車並返回nilRails中的這個神祕'j'是什麼?

rails c 
Loading development environment (Rails 3.2.13) 
[6] pry(main)> j 
=> nil 
[1] pry(main)> j.nil? 
=> true 

谷歌沒有讓我到任何地方。有人知道這個神祕的j是什麼,它的目的是什麼?只是好奇。

+1

我知道'j'是'escape_javascript'的縮寫,它允許你在'.js.erb'文件中插入部分。如果你沒有參數調用它,它可能會返回零。 –

+0

還有'p'和'y'。 – roob

+2

@roob - 是的,'y'方法來自'YAML'模塊,可以在'require'yaml''後面以純ruby方式訪問,沒有任何寶石。 – BroiSatse

回答

12

你總是可以找到使用source_location給定的方法來源:

method(:j).source_location 

甚至與撬確切的定義(或method_source寶石):

method(:j).source 

結果:

def j(*objs) 
    objs.each do |obj| 
    puts JSON::generate(obj, :allow_nan => true, :max_nesting => false) 
    end 
    nil 
end 

j是一種來自JSON庫的方法(它在添加此方法Kernel模塊,因此它在IRB訪問),它負責顯示給定的參數爲JSON對象:

j(hello: :world) 
    #=> {"hello":"world"} 
    nil 

Rails的默認情況下需要json庫,所以它是可用,立竿見影。在純IRB中,您需要require 'json'才能訪問它。

它接受任意數量的參數,所以j返回零而不打印任何東西。相當於p的方法,只是用json代替inspect的結果。

+0

這是有幫助的。很好的答案。另外,我不知道我可以這樣做:'method(:j).source'。謝謝你教我新東西! –

+1

@RyanRebo - 嗯,通常你不能,你需要運行pry會話或者需要'method_source' gem才能做到這一點。然而'source_location'即使在最純粹的irb中也是可用的。 – BroiSatse

+0

@BroiState Ahhh gotchya。謝謝,很高興知道! –

相關問題