Hatena::Grouprubyist

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

Ruby ロゴ (C) Ruby Association LLC

2010年11月07日(日)

String#delete

| 22:09 |  String#delete - Going My Ruby Way を含むブックマーク はてなブックマーク -  String#delete - Going My Ruby Way  String#delete - Going My Ruby Way のブックマークコメント

String#delete の挙動です。

>> "foo".delete("oo")
=> "f"
>> "foo".delete("o")
=> "f"
>> "foo".delete("fo")
=> ""
>> "foo".delete("of")
=> ""

どうも好きでありません。直感的に delete の仕様がわからないからです。

個人で使っている String クラスの拡張 String#- と比較します。

>> "foo" - "oo"
=> "f"
>> "foo" - "o"
=> "fo"
>> "foo" - "fo"
=> "o"
>> "foo" - "of"
=> "foo"

ついでに、他の私家版メソッドの動きです。

String#>>String#indet、String#**String#atString#uccString#lcc

>> "foo" >> 2
=> "  foo"
>> "foo".indent(3, ">")
=> ">>>foo"
>> "foo" ** "[]"
=> "[foo]"
>> "foo" ** "|"
=> "|foo|"
>> "foo" ** %w( <<< >>> )
=> "<<<foo>>>"
>> "abc".at(1)
=> "b"
>> "camel-case-text".ucc
=> "CamelCaseText"
>> "camel-case-text".lcc
=> "camelCaseText"

Refe のインストール

| 21:06 |  Refe のインストール  - Going My Ruby Way を含むブックマーク はてなブックマーク -  Refe のインストール  - Going My Ruby Way  Refe のインストール  - Going My Ruby Way のブックマークコメント

Refe のインストールについてのメモです。環境は Ubuntu です。

Refe は上記サイトからダウンロードできます。

ドキュメントデータが付属する *-withdoc.tar.gz をダウンロードしました。

今日現在の最新版は refe-0.8.0-withdoc.tar.gz です。

tar ボールに同梱の README.jp の手順に従いビルドします。

$ tar zxvf refe-0.8.0-withdoc.tar.gz
$ cd refe-0.8.0/
$ ruby setup.rb config
$ ruby setup.rb setup
$ sudo ruby setup.rb install

ですが、これだと Ubuntu では字化けします。(データが EUCUbuntuUTF-8 なので)

ruby setup.rb config の前に、以下を実行します。

まず変換用スクリプトを作成します。

スクリプトは ~/bin などPATH が通ったところに置きます。

(ここでは conv.sh という名前にします)

-------- (conv.sh の内容) -------
#!/bin/bash
iconv -f euc-jp -t utf-8 $1 >tmp
mv -f tmp $1
------------------------------

refe-0.8.0/data 以下のファイルすべてを conv.sh で処理します。

$ find data -type f -exec conv.sh {} \;

conv.sh が終了したら手順通りにセットアップします。

$ ruby setup.rb config
$ ruby setup.rb setup
$ sudo ruby setup.rb install

テストしてみます。

$ refe Module#alias_method
Module#alias_method
--- alias_method(new, old)

    メソッドの別名を定義します。
    alias との違いは以下の通りです。

      * メソッド名は文字列または Symbol で指定する
      * グローバル変数の別名をつけることはできない
      * alias は構文なのでメソッドの中では使えない

    self を返します。

OKです。

以上です。

alias

| 16:36 |  alias - Going My Ruby Way を含むブックマーク はてなブックマーク -  alias - Going My Ruby Way  alias - Going My Ruby Way のブックマークコメント

試験に落ちたので Ruby の基本から勉強です。

alias について

リファレンスマニュアルを要約します。(試験では ver1.8.x 対象です)

(文法)
alias 新メソッド名 旧メソッド名
alias 新グローバル変数名 旧グローバル変数名

メソッドあるいはグローバル変数に別名をつけます。ただし、正規表現の部分文字列に対応する変数 $1,$2, ... には別名を付けることができません。

メソッド名には識別子そのものか Symbol を指定します。(シンボルが使える!? 昔から?)

(使用例)
alias foo bar
alias :foo :bar            
alias $MATCH $&

alias 式は nil を返します。(alias 式?... alias 文でないの?)

----

シンボルが使えるとは知りませんでした。(1問損した...orz)

上のサイトにも書いてありますが alias は構文なのでシンボルを渡すのは気持ち悪いです。何でなんでしょう。

シンボル使うなら Module#alias_method を使えます。refe の 説明。

Module#alias_method
--- alias_method(new, old)

    メソッドの別名を定義します。
    alias との違いは以下の通りです。

      * メソッド名は文字列または Symbol で指定する
      * グローバル変数の別名をつけることはできない
      * alias は構文なのでメソッドの中では使えない

    self を返します。

(alias もシンボル使えるので違いではないのでは?)


alias が構文なら元々の構文設計で sh 系と同じく、

alias new_name = orig_name

のように「=」を入れて欲しかったです。new と orig の位置を迷わないと思います。

Module#alias_method は私なら下のような Syntax の方が好みです。

alias_method :orig_name => :new_name
alias_method :orig_name => [:new_name1, :new_name2, ...]