Hatena::Grouprubyist

Going My Ruby Way このページをアンテナに追加 RSSフィード

Ruby ロゴ (C) Ruby Association LLC

2010年11月23日(火)

Ruby 1.9

| 08:49 | Ruby 1.9 - Going My Ruby Way を含むブックマーク はてなブックマーク - Ruby 1.9 - Going My Ruby Way Ruby 1.9 - Going My Ruby Way のブックマークコメント

マジックコメント

1 行目に以下の形式で書く。(xxxx にエンコーディング)

# coding: xxxx
名前(エイリアス)NG例
UTF-8utf-8utf8
EUC-JP(eucJP)euc-jp, eucjp
Windows-31J(CP932)windows-31jwindows_31j
Shift_JISshift_jisshift-jis
ISO-2022-JP(ISO2022-JP)iso-2022-jp
US-ASCII(ASCII)us-ascii, asciiusascii
ASCII-8BIT(BINARY)ascii-8bit, binary

エンコーディング

# エンコーディングのリスト
Encoding.list   # => [#<Encoding:ASCII-8BIT>, #<Encoding:UTF-8>, ...

# ダミーエンコーディングか否か
# ダミーでないエンコーディングでないと文字単位での操作ができない
Encoding::UTF_8.dummy?              # => false

# ASCII互換か否か
# ASCII非互換のエンコーディングは Ruby のソースで使用できない
Encoding::UTF_8.ascii_compatible?   # => true
s2 = s1.encode("UTF-8")    # s1 の内容を UTF-8 でエンコードして返す
s1.force_encoding("UTF-8") # s1 のエンコーディング情報を UTF-8 に書き替える

File.open("foo", "r:euc-jp:utf-8") {... # EUC-JP -> UTF-8 の変換を行なう
File.open("bar", "w:utf-8:euc-jp") {... # UTF-8 -> EUC-JP の変換を行なう 

以下の操作はエンコーディングを合わせて行なう必要がある。

以下は文字単位で扱う。

  • String#length, String#size (バイト数でなく文字数を返す)
  • String#, String#= (nバイト目でなく n文字目を読む/書く)
  • IO#getc (1バイトでなく1文字読み込む)

Ruby1.9 では以下が追加されている

  • String#getbyte (nバイト目を読む)
  • String#setbyte (nバイト目に書く)
  • IO#getbyte (1バイト読み込む)

Ruby1.9 では以下が削除されている

ASCII コードの取得

?A.ord    # => 97

ブロックパラメータ

ブロックローカル変数がローカル変数を書き替えなくなった。(Good!)

ハッシュリテラル

{:a => 1, :b => 2}

{a: 1, b: 2}        # このように書ける

require

require がカレントディレクトリからコードを読み込まなくなった

代替方法は以下。

require './foo'

$LOAD_PATH.unshift '.'
require 'foo'

require_relarive 'foo'

p

p が引数を返すようになった。

正規表現

正規表現のマッチに名前をつけて(ローカル変数として)参照できるようになった。

/(?<speed>\d+)/ =~ "100Mbps"

p speed         # => "100"

BasicObject

Object の基底クラスが BasicObject (ブランクスレート)になった。