2010年10月07日

Rubyではメソッドは呼び出す前に定義してしまわなければならない

らしい。

以下のコードはダメ。

f

def f
	puts "call f"
end
/cygdrive/d/Documents and Settings/amaisaeta/test.rb:1: undefined local variable
or method `f' for main:Object (NameError)

なので、定義を先に書かなければならない。

def f
	puts "call f"
end

f
call f

最初、メソッドの定義を後回しにしてたらエラーになって驚いた。

えー、これダメなのか。メソッドの定義を後回しに出来る言語なんて沢山あるぞ。なんでダメなんだろう。どう考えても、後に書けた方が可読性高くなりそうなのに。

ラベル:ruby
posted by 天井冴太 at 03:21| Comment(0) | TrackBack(0) | Study | 更新情報をチェックする

2010年10月01日

例外のcatch時に変換関数は適用されない

いやようするに、

#include <iostream>
#include <stdexcept>
using namespace std;

struct C {
	operator runtime_error() {
		return runtime_error("original description");
	}
};

int main()
{
	try {
		throw C();
	} catch(runtime_error &) { // (1)ここには来ないで……
		cout << "catch std::runtime_error!" << endl;
	} catch(...) { // (2)ここに来る
		cout << "catch some type..." << endl;
	}
}

てな感じで、変換関数が定義されたクラスをthrowしても、catchする時にはそれは適用されない。らしい。驚いた。

なんかあんまり直感的でないなー。なんでこうなっているんだろう。

ラベル:C++
posted by 天井冴太 at 03:13| Comment(0) | TrackBack(0) | Study | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は180日以上新しい記事の投稿がないブログに表示されております。