【问题标题】:What is this mystery 'j' in Rails?Rails 中的这个神秘的“j”是什么?
【发布时间】:2015-12-16 00:44:04
【问题描述】:

我在 Rails 控制台中,不小心输入了字母 j,然后按回车,它返回了 nil

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

Google 没有找到我。有谁知道这个神秘的j 是什么,它的目的是什么?只是好奇。

【问题讨论】:

  • 我知道jescape_javascript 的缩写,这种方法允许您在.js.erb 文件中插入部分内容。如果你不带参数调用它,它可能会返回 nil。
  • 还有py
  • @roob - 是的,y 方法来自YAML 模块,可以在require 'yaml' 之后没有任何宝石的纯红宝石中访问。

标签: ruby-on-rails


【解决方案1】:

你总是可以使用source_location找到给定方法的来源:

method(:j).source_location

甚至用 pry(或 method_source gem)定义它的确切定义:

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 返回 nil 而不打印任何内容。相当于p方法,只是用json代替inspect结果。

【讨论】:

  • 这很有帮助。很好的答案。另外,我不知道我能做到这一点:method(:j).source。谢谢你教我一些新东西!
  • @RyanRebo - 好吧,通常你不能,你需要运行 pry session 或要求method_source gem 才能做到这一点。 source_location 即使在最纯的 irb 中也可用。
猜你喜欢
  • 2011-11-30
  • 1970-01-01
  • 2020-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多