【问题标题】:Ruby dot parenthesis call syntaxRuby 点括号调用语法
【发布时间】:2014-10-27 02:54:04
【问题描述】:

我正在阅读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

【问题讨论】:

    标签: ruby function syntax parameters


    【解决方案1】:

    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
    

    【讨论】:

      猜你喜欢
      • 2023-04-03
      • 1970-01-01
      • 2011-09-24
      • 1970-01-01
      • 1970-01-01
      • 2010-10-10
      • 2015-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多