Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Ruby | 「call」メソッド の Syntax Sugar 「.()」 について

More than 5 years have passed since last update.

Ruby | 「call」メソッド の Syntax Sugar 「.()」 について

概要

RubyKaigi で 登壇予定の Satoshi Egi 氏 の
egison-ruby を読んでいて「ん??」という文法がありました。

件のコードがこちら。

        with(List.(*_, _x, *_)) do

https://github.com/egison/egison-ruby/blob/master/lib/egison/matcher.rb#L71

List.() なんて書き方ははじめてみました。

「call」メソッド の Syntax Sugar により「.()」 と記述できることを活用しています。

サンプルコード

require 'tbpgr_utils'

class Hoge
  def self.call(msg)
    msg
  end
end

class Hige
  def call(msg)
    msg
  end
end

class Parent
  def self.call(msg)
    msg
  end
end

# 継承も使えます
class Child < Parent
end

module MyModule
  def call(msg)
    msg
  end
end

# Mix-inも使えます
class Includer
  include MyModule
end

bulk_puts_eval binding, <<-EOS
Hoge.("hoge")
Hoge.call("hoge")
Hige.new.("hige")
Hige.new.call("hige")
Child.("child")
Child.call("child")
Includer.new.("includer")
Includer.new.call("includer")
EOS

__END__
下記はTbpgrUtils gemの機能
bulk_puts_eval

https://rubygems.org/gems/tbpgr_utils
https://github.com/tbpgr/tbpgr_utils

出力

$ ruby ruby_implicit_send_call.rb
Hoge.("hoge")                 # => "hoge"
Hoge.call("hoge")             # => "hoge"
Hige.new.("hige")             # => "hige"
Hige.new.call("hige")         # => "hige"
Child.("child")               # => "child"
Child.call("child")           # => "child"
Includer.new.("includer")     # => "includer"
Includer.new.call("includer") # => "includer"

参照

tbpgr
Rubyを扱う人事(研修開発、エンジニア採用) Learning Designer。 tbpgr の読み方は(てぃーびー) 個人ブログでも色々と情報を垂れ流してます。 http://tbpgr.hatenablog.com/
http://tbpgr.hatenablog.com/
studist
「伝えることを、もっと簡単に」をミッションにビジュアルSOPマネジメントプラットフォームのBtoB SaaS「Teachme Biz」を開発・運営するスタートアップ
https://medium.com/studist-dev
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away