圆点括号调用语法

标签 ruby function syntax parameters

我正在阅读 jbuilder's README并看到了这些代码:

class Person
  # ... Class Definition ... #
  def to_builder
    Jbuilder.new do |person|
      person.(self, :name, :age)
    end
  end
end

我试图自己复制它,它要求一个call 方法,所以:

class Thing
   attr_accessor :name, :age

   def call(*args)
     puts args.inspect
   end
end

Thing.new.(:name, :age) # => [:name, :age]

那么为什么在jbuilder调用中会有一个self呢?

最佳答案

self 这里只是传递给Jbuilder的call方法的一个参数。

Jbuilder需要person的实例(在代码中是self)和属性名(:name:age 在代码中)生成 json 数据。

例子:

class Thing
   attr_accessor :name, :age

   def call(*args)
     puts args.inspect
   end
end

class Bar
  def to_thing
    Thing.new.(self, :name, :age)
  end
end

Bar.new.to_thing

关于圆点括号调用语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26580516/

相关文章:

c - 函数导致通过引用传递的变量出现意外行为

syntax - 在Xtend模板表达式中转义单引号

c - 为什么在使用 Bison 的 C 语法分析期间无法识别已定义的标记?

php - 查找可能的 URL 参数

ruby - capybara 与 Selenium : Can't click on hidden element

javascript - Ruby 中的 Array.prototype.splice

ruby - 使用ohm在redis中进行批量删除

javascript - boolean 值表现为 true,但列出为 false?

c - 输出返回错误结果

javascript - script.js 文件未链接到 index.html