3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Ruby】%記法について

Posted at

rubyやrailsを学習する中で「%」を使った表記とちらほら出会うのでいくつか整理してみました。
※ここれは計算式の「%」は入れてません。(割って余りを出すあれ)

%q! ! はシングルクオートと同じ意味

puts %q!He said, "Don't speak."!  #=> He said, "Don't speak."

%Q! ! と %! ! はダブルクオートと同じ意味

区切り文字は ! 意外にも ? や カッコ( > や } ) 等、任意の記号を使える。

something = "Hello."
puts %Q!He said, "#{something}"!  #=> He said, "Hello."

puts %!He said, "#{something}"!  #=> He said, "Hello."
# ? を区切り文字に使う場合。
puts %q?He said, "Don't speak."?  #=> He said, "Don't speak."

# { } を区切り文字に使う場合。
puts %q{He said, "Don't speak."}  #=> He said, "Don't speak."

%w + 区切り文字で文字列を配列にする。(! は任意の記号に変えれる)

空白文字(スペースや改行)が連続した場合も1つの区切り文字として見なされる。

# !を区切り文字で使う。
%w!apple melon orange! #=> ["apple", "melon", "orange"]

# ()を区切り文字で使う。
%w(apple melon orange) #=> ["apple", "melon", "orange"]

# []区切り文字で使う。
%w[apple melon orange] #=> ["apple", "melon", "orange"]

# 空白文字(スペースや改行)が連続した場合も1つの区切り文字として見なされる。
%w(
  apple
  melon
  orange
)  #=> ["apple", "melon", "orange"]

%W だと式展開や改行文字( \n )、タブ文字 ( \t )も含めた配列が可能

prefix = 'This is'
%W(#{prefix}\ an\ apple samall\namelon orange) 

#=> ["This is an apple", "samall\namelon", "orange"]

%s でシンボルを作成

# !を区切り文字で使う。
%s!ruby is fun! #=> :"ruby is fun"

# ()を区切り文字で使う。
%s(ruby is fun) #=> :"ruby is fun"

%i でシンボルの配列を作成。空白文字が要素の区切りとなる。

# ()を区切り文字にした場合。
%i(apple orange melon) #=> [:apple, :orange, :melon]

# []を区切り文字にした場合。
%i[apple orange melon] #=> [:apple, :orange, :melon]

改行文字や式展開をする場合は %I と大文字にする。

name = 'Alice'
%I(hello\ngood-bye #{name.upcase}) #=> [:"hello|ngood-bye", :ALICE]

【参考文献】

書籍:プロを目指す人のためのRuby入門

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?