Rubyパーセント記法まとめ

Rubyパーセント記法まとめ

パーセント記法

小文字はシングルクォート展開、大文字はダブルクォート展開というイメージでいいかもしれません。

%q

シングルクォートで()内を展開します。

シングルクォートのため、式展開はできません。

>> %q(test)
=> "test"
>>
>> 'test'
=> "test"
>>
>> a = "test"
>> %q(#{a})
=> "\#{a}"

%Q, %

ダブルクォートで()内を展開します。

ダブルクォートのため、式展開が可能です。

>> %Q(test)
=> "test"
>>
>> a = "test"
>> %Q(#{a})
=> "test"

>> %(test)
=> "test"
>>
>> a = "test"
>> %(#{a})
=> "test"

%w

シングルクォートで()内を配列展開します。

シングルクォートのため、式展開はできません。

>> %w(a b c)
=> ["a", "b", "c"]
>>
>> a = "test"
>> %w(#{a} b  c)
=> ["\#{a}", "b", "c"]

%W

ダブルクォートで()内を配列展開します。

ダブルクォートのため、式展開が可能です。

>> %W(a b c)
=> ["a", "b", "c"]
>>
>> a = "test"
>> %W(#{a} b  c)
=> ["test", "b", "c"]

%i

シングルクォートで()内をシンボル展開します。

シングルクォートのため、式展開はできません。

>> %i(a b c)
=> [:a, :b, :c]
>>
>> a = "test"
>> %i(#{a} b c)
=> [:"\#{a}", :b, :c]

%I

ダブルクォートで()内をシンボル展開します。

ダブルクォートのため、式展開が可能です。

>> %I(a b c)
=> [:a, :b, :c]
>>
>> a = "test"
>> %I(#{a} b c)
=> [:test, :b, :c]

%s

シングルクォートで()内をシンボル展開します。

シングルクォートのため、式展開はできません。

また、要素展開ではなく単一のものとして展開します。

>> %s(a)
=> :a
>>
>> %s(a b)
=> :"a b"
>>
>> a = "test"
>> %s(#{a})
=> :"\#{a}"

%x

シェルのコマンドを実行します。

シェルの``と同じような使い方ができそうです。

>> %x(date +%Y%m%d; echo "\sHalloween")
=> "20201028\n Halloween\n"

%r

正規表現です。エスケープを書かなくていいので、汎用性が高そうです。

?> if "test".match(%r(t..t))
?>   p "ok"
>> end
"ok"
=> "ok"

書式付きで値を記載

パーセント記法と似ている記載方法をするため、区別のためここに記載しておきます。

文字列 : %s

stringを%の後に記載して、渡します。

>> p "test: %s" % "leftstring"
"test: leftstring"
=> "test: leftstring"

全体の文字列の長さを記載することもできます。足りない文字列は空白で埋めてくれます。

※leftstringと空白合わせて20

>> p "test: %20s" % "leftstring"
"test:           leftstring"
=> "test:           leftstring"

>> p "test: %-20s" % "leftstring"
"test: leftstring          "
=> "test: leftstring          "

整数 : %d

intergerを%の後に記載して、渡します。

>> p "test: %d" % 5
"test: 5"
=> "test: 5"

桁数を記載することもできます、以下は2桁で記載していますが桁数が足りない箇所は空白で埋まっています。

>> p "test: %2d" % 5
"test:  5"
=> "test:  5"

上記の足りない桁箇所を0で埋めるには、0としてあげます。

>> p "test: %02d" % 5
"test: 05"
=> "test: 05"
>>
>> p "test: %05d" % 5
"test: 00005"
=> "test: 00005"

浮動小数点 : %f

floatを%の後に記載して、渡します。

>> p "test: %f" % 5.5
"test: 5.500000"
=> "test: 5.500000"

fの前に、桁数を記載することができます。小数点以下が2桁になっていることが分かります。

>> p "test: %3.2f" % 555.55555
"test: 555.56"
=> "test: 555.56"

全体の幅を指定することもできます。

>> p "test: %6.2f" % 555.55555
"test: 555.56"
=> "test: 555.56"
>> p "test: %7.2f" % 555.55555
"test:  555.56"
=> "test:  555.56"
>> p "test: %8.2f" % 555.55555
"test:   555.56"
=> "test:   555.56"

printf

書式付きはprintfを使うことで、「,」で渡せるようになります。

また、結果を出力します。

>> printf("name: %10s\n", "test")
name:       test
=> nil
>> printf("name: %05d\n", 5)
name: 00005
=> nil
>> printf("name: %3.2f\n", 5.555)
name: 5.56
=> nil

sprintf

こちらは結果を文字列として返してくれます。

文字列をpで出力してみます。

>> sprintf("name: %10s", "test")
=> "name:       test"
>>
>> p sprintf("name: %10s", "test")
"name:       test"
=> "name:       test"
>> sprintf("name: %05d", 5)
=> "name: 00005"
>>
>> p sprintf("name: %05d", 5)
"name: 00005"
=> "name: 00005"
>> sprintf("name: %3.2f", 5.555)
=> "name: 5.56"
>>
>> p sprintf("name: %3.2f", 5.555)
"name: 5.56"
=> "name: 5.56"