はてなキーワード: インスタンスとは
OK。長々とつきあってくれてありがとう。君の主張は理解できたと思う。
元増田が「見たことないわ。白い事にしたいんじゃないの。叩きたいが為に」と返した。
そこへ横増田が
「ホシガラスを知ってるか。あれは白いんだぞ」
と返したわけだ。
さて、誰がそこでホシガラスの話をしたいのだろう?
それなら元増田の反論がそもそもおかしい。反証としては「白くないカラスが(少なくとも一羽)存在する」で必要十分だった。ここで全否定するからおかしなことになる。それに元増田が本当にホシガラスを知ってなお「白いカラスなんて見たことない」と言っているのかどうかは本人以外(あの文章からは)わからない。したがってホシガラスの例を指摘する意味はある。
余談ながら個人的になぜ今更栗本薫なんぞを引っ張ってくるんだ?
栗本でなくてもいい。任意の一例だから。腐女子集合の1インスタンスでありさえすればいい。繰り返すがtheでなくaなんだ。彼女が腐女子を代表する好例と思っているわけでもない。ただ簡易に提示可能だったから引いたまでにすぎない。ついでに言うと私は彼女のまとまった著書をほとんど読んだことがない(中島梓名義の,拒食症についての論考1冊)。君はよくよくテキストを特定文脈に位置づけて読みたがる人なんだなという印象をもった。これを読解力というなら確かに私は読解力に欠ける。
記事削除するんだったら元記事改竄しても同じだと思う。
記事を再編集している間に元記事に対してレスされることをおそれたから。消すのは一瞬だからその方が再編集するより元記事の露出時間は短くなると考えた。結果としては無駄な面倒だったね。
ギークではないし、どちらかといえば下手なのですが。
http://anond.hatelabo.jp/20090324005857
例えば、サムネイルを作る makeThumbnails という関数なら、
result = array.new() while(src = gets()) result.add(Thumbnail.new(src)) end return result
かもしれないし、例えばサムネイルを一覧表示時のアイコンに使うなら、index_iconsとか、gif化してアニメーションするならframesとかつけるかも。
ちなみに、perlなら $frame = shift @frame だ。
http://anond.hatelabo.jp/20090220065041
8つしかないボタンの順番を正しく押さないと目的地への切符が買えない。
普通の英文による注文で切符が買えるハズなのだが、実際には専門家に頼んで注文を書いてもらわないと上手く買えない。
亀を出発駅から到着駅まで移動させることで切符を買う。
出発駅と到着駅の型が違う場合、適切な経由駅を設定しないと切符が買えない。
任意の切符を発行するためのビルダーテンプレートのインスタンスを生成できる。
切符は他の切符のコピーで作られるため、切符をどう印刷するかについてのプログラムはまったく入っていない。
到着駅と出発駅を入力すると、到達可能であることが示される。切符は出てこない。
どの駅でも同じ操作で切符が買えるハズなのだけど、実際のところは微妙に違ってぬるぽで落ちる。
ところでサー
javascriptってラッパー作りやすくていいよね。
名前を変えずにラップ出来るから好き。
クラスもインスタンスもメソッドも関数もオーバーライドしてラップして、好き勝手出来るから好き。
(function(){ var origin = hoge.prototype.foo; hoge.prototype.foo = function(){ ... }; hoge.prototype.foo.origin = origin; })();
perlはオーバーライドできるけど、元のメソッド呼べなくなる。すべてのインスタンスに影響する(たしか)。チョイめんどい。
use hoge; package hoge; sub foo { ... } package main; ...
他の言語では、どんな技がありますか?
[追記]
\&hoge::foo で元のコードのリファレンス取れたっけ?
すっかり忘れてる。
javascriptでスーパークラスのメソッドを簡単に呼び出したかった。それだけだった。
var Class = inherit(SuperClass, {hoge: ...});
作ったクラスはprototypeに、第二引数のオブジェクトがコピーされたスーパークラスのインスタンスを持つ。
第一引数がnullだと、スーパークラスにObjectを用いる。つまり、
var Class = inherit(null, {hoge: ...});
は
var Class = inherit(Object, {hoge: ...});
と同等となる。
また、第一引数が"prototype"をメンバに持たない普通のオブジェクト、つまり、
var Class = inherit({hoge: ...});
だと
var Class = inherit(Object, {hoge: ...});
と同等となる。
var obj = new Class({hoge: ...});
でインスタンスを作ると、引数のオブジェクトのコピーを持つオブジェクトとなる。
また、メソッド"initialize"が自動的に実行される。
ただし、コンストラクタに引数を渡さなかった場合は、initializeは実行されない。
this.superapply(arguments);
としてスーパークラスのメソッドを呼べる。第一引数は呼び出すメソッドの引数の配列とする。
このとき、呼び出し側のメソッドはコンストラクタやinheritでオーバーライドしたメソッドでなくてはならない。これは呼び出し側のメソッド名を記録する必要があるためである。
そうでない場合は第二引数にメソッド名を渡す必要がある。
var obj = new Class({}); obj.foo = function(){ this.superapply(arguments); // X this.superapply(arguments, "foo"); // O };
<html><head> <script type="text/javascript"> function inherit(superclass, override) { if (!superclass) superclass = Object; if (! "prototype" in superclass) { override = superclass; superclass = Object; } var that; var func; function superapply(arg, name) { var prev = {that: that, func: func}; try { var my = this.superapply; if (!arg) arg = []; if (!name) name = arguments.callee.caller.caller.methodName; if (that && func && (!name || name == func.methodName)) { that = that.superapply.obj; name = func.methodName; } else if (name) { that = my.obj; func = arguments.callee.caller.caller; func.methodName = name; } else { throw new Error("methodName is null"); } var result; if (func === that[name]) { result = this.superapply(arg, name); } else { func = that[name]; func.methodName = name; result = func.apply(this, arg); } } finally { that = prev.that; func = prev.func; } return result; }; var prototype = new superclass(); prototype.superapply = function(){superapply.apply(this, arguments)}; prototype.superapply.obj = superclass.prototype; if (override) for (var i in override) { prototype[i] = override[i]; if (typeof override[i] == "function") prototype[i].methodName = i; } var subclass = function(obj) { this.superapply = function(){superapply.apply(this, arguments)}; this.superapply.obj = prototype; if (obj) { for (var i in obj) { this[i] = obj[i]; if (typeof obj[i] == "function") this[i].methodName = i; } this.initialize(); } }; subclass.prototype = prototype; subclass.prototype.constructor = subclass; return subclass; } var C1 = inherit(Object, { fn: "C1", initialize: function(){ alert("C1.initialize"); this.second(this.fn); }, second: function(a){ alert("C1.second: "+a); } }); var C2 = inherit(C1, { fn: "C2", initialize: function(){ alert("C2.initialize"); this.superapply(); // }, //second: // function(a){ // alert("C2.second: "+a); // this.superapply([a]); } }); var C3 = new C2({ fn: "C3", //initialize: // function(){ // alert("C3.initialize"); // this.superapply(); // }, second: function(a){ alert("C3.second: "+a); this.superapply([a]); } }); </script> </head><body> </body><html>
methodNameなんとかならんもんか。
Python2.5のときは、新スタイルクラスのインスタンスは辞書のキーとして必ず使用できたけど、Python 2.6ではそういうわけじゃなくなってるぽい。という話。
class TestClass(object): def __init__(self, i_name): self._name = i_name def __eq__(self, i_other): if not isinstance(i_other, TestClass): return False return self._name == i_other._name print 'object.__hash__ = ' + str(object.__hash__) print 'TestClass.__hash__ = ' +str(TestClass.__hash__)
上記のようなコードを実行したら、Python 2.5とPython 2.6で結果が違いました。
Python 2.5の場合の結果。
object.__hash__ = <slot wrapper '__hash__' of 'object' objects> TestClass.__hash__ = <slot wrapper '__hash__' of 'object' objects>
Python 2.6の場合の結果。
object.__hash__ = <slot wrapper '__hash__' of 'object' objects> TestClass.__hash__ = None
Python 2.6だと、objectクラスを継承すると、__hash__がNoneになっちゃってる。このままだと辞書のキーとして使えないね。objectを継承したクラスで__hash__を実装すれば、大丈夫みたい。
「ハッシュ値の計算方法 (2)」というページも参考になりそう。
よもや、レスがついてるとは思わなかった。
興味を持ってもらえてサンクスです。
entry = diary.entry('20070712231804')
でエントリー指定してたからなんなんだろうと思って。
editもできるってことなのかな?
書き込んだあとの編集機能はいまんとこなし。
# get entry from id entry = diary.entry('20070712231804') # puts entry title puts entry.title # puts entry content puts entry.content
で、そもそもRubyに詳しくない自分からするとちゃんとした使い方がそれでもわからない。
バカでごめんねなんだけど、どうやって使えばいいの?
たとえば、エントリのタイトル一覧(1ページ目だけだけど)を出力するなら
diary = Masuda::Diary.new diary.entries do |entry| puts entry.title end
こんな感じかな。
新しいエントリを登録するなら
diary = Masuda::Diary.new diary.login('my_id', 'my_pass') diary.post('koko wa title ne', <<EOS) koko ni kizi no honbun wo kaku EOS
とか。
ずらーっと増田らしきものを読み込む。
そりゃそうだわなと思いながら文字化けの山。
文字化けなのは、たぶん増田のエントリ(UTF-8)をそのまんま取得しているせいだと思う。
~$ ruby hoge.rb | nkf -Ws
出力するときにSJISに変換するとか。
require 'rubygems' require 'masuda' require 'kconv' diary = Masuda::Diary.new diary.entries.each do |entry| puts entry.title.tosjis puts entry.content.tosjis end
あと
session[:diary] = diary.raw
diary = Masuda::Diary.restore(session[:diary])
の...って何でしょうか??
Masuda::Diary#rawはインスタンスをシリアライズするメソッド。
ログイン済みのインスタンスをシリアライズしてセッションにつっこんどいて、次のリクエストでも使いまわすとか。
わかりづらい文章で申し訳ない。
本講座ではほかの言語は触ったことがあるが、Ruby未経験者を対象にRailsを触るための最小限のrubyの知識を身につけるためのものである。
と、堅苦しく書いたけど仕事で急いでrailsを触れうようになるための最低限の情報だけをまとめてみたよ。
これを読んだだけではRubyでプログラムを書けるようにはならないと思うけど、Railsを使った開発だといきなり何もできないってことはなくなるはずだよ。
肩の力を抜いて読んでほしいな。
いきなり今まで宣言していない名前を使ってもおこらえないよ。
answer_to_life_the_universe_and_everything = 42 # answer_to_life_the_universe_and_everything ????~A~S??~S????~H~]??~A????~Y??| ??~A~Y??~K??~B
なんて書いても問題ないんだ。
静的言語をやってきた人には型の宣言がないことに違和感を感じる人もいるかもしれないけど、Rubyでは型はあんまり気にしないんだ。
int x = HogeHoge.new;
みたいな書き方では
変数xを用意してそこにHogeHoge.newを代入する。といった説明を受けたと思う。
でもRubyではちょっと違う考え方をするんだ。
x = Foo.new
だとFoo.newの変数を用意して、それを名前に"束縛"するって説明することが多いよ。
ラベルが貼られた箱を用意してそこに何かを入れるか、何かが入った箱を用意してそれにラベルを張るかの違いだね。後者のほうがちょっとだけ柔軟なんだ。
そして、柔らかいほうがRuby流って気がするよ。
でもそんなRubyでもちょっとだけ名前に関するルールがある。
小文字からはじまる名前が局所変数
ってルールだよ。
Railsだったらとりあえず@からから始まる名前にしておけばたいていは問題ないんじゃないのかな。
JavaやC言語ではif文なんかをよく使うよね。Rubyでもほとんど一緒だよ。
if something_condition do_some_thing elsif other_condition do_another_thing else do_something_if_you_wont end
もちろんelsifやelseが必要なければ省略することができるよ。
ほかにもRubyには便利な分岐の書き方があるよ。
so_some_thing if some_condition
みたいに後置でも書けるんだ。
どっちでも好きなほうを使えばいいと思うよ
def func_name ( some_val_names ) do_some_thing end
といった感じでdef..endでくくるだけで簡単に関数を宣言できるよ
そして関数の戻り値は最後に評価した値が自動的に戻り値になるんだ。
def baz 10 end
これは常に10を返す関数の例だよ。
プログラムをしていて非常によく使うデータの型といえば配列(Array)や連想配列(Hash)だよね。
Rubyではそれらを簡潔に使うために専用の文法を用意している。
それが[]と{}だ。
arr = [1,2,3,"A","B","CDE"] #??~M很~W宣訾@ has = {1 => "A",2 => "B", 3 => "C"} #??~O??~C????~CťΣ訾@ puts arr[3] puts has[2]
A B
正直どれもあまり役にたたなそうだなと立ち読みしながら思った。
Perlと同じぐらいの書籍がおいてあるのに書籍のレベルが総じて低い。期待値と未成熟さが同居している。
本を買っただけで、他にはなにもしなかった。
Railsでソーシャルブックマークを作ってみようか(第2回)
http://d.hatena.ne.jp/PoohKid/20070220/p1
これをちろりとやってみた。
ログインしたらIn the Caboose.なるポエムが表示されて変なプラグインいれちゃったのかとかなり反省。
よくわからない。
どうもしくじったようだ……。
とおもったら、できてたみたい。
views/account/index.rhtmlに記述されてた内容がそのまま表示されていたようです。
「エラーが発生しました。詳細についてはエラー・ログを参照してください。」
なんとなく構成はわかったから、そろそろコーディングしてみるか。
昨日買った本を読みながらやっていたのだが、この本がなかなかいい。
少なくとも最初に買った
とは大違い。実用書は現物をある程度見てから買わないとダメだと痛感した。
もし、この本を本屋で立ち読みしてからだったら買わなかっただろう。
やっぱSEはやるなー。秀和ははずすとほんとに本の趣旨がわからなくなる。
engines:なんだろう
Login engine:なんだろう
サンプルとかをみていると変数前に$、@がつく。なんだろう?スコープかな。
$→グローバル
サンプル突っ込んでいわれるがまま設定して500だと不慣れだとどうしていいかわからないよ。
せめて行とかでないものか、どこで設定するのだろうか。
探したがみつからなかった。
Rake Tasksの画面で
db:migrate:enginesと呼び出すところを候補がでないので、
db:migrateでメソッドをenginesにしてしまいなんで失敗するのかわからなかった。
にしてもまいった。こんな時間までがんばってみたが、本当にコーディングにも入れないまま終わりそうだ。
文字列 'Hello world' の o の合計数は2、全文字数は11
string = 'Hello world'
print string.count('o'), len(string) # prints 2, 11 why not string.len()?
Ruby:
string = 'Hello world'
jijixi's diary - Ruby に比べて Python の面倒なところ
Django勉強会始まったよ|| Woops'dez | Bloggin'
Pythonはグローバルスコープとローカル(関数)スコープ以外のスコープを何も持っていない。
だからPythonには「本物の」OOシステムがあるのだとしても、クラスは自分のインスタンス変数にさえアクセスできない。
あらゆるインスタンスメソッドに対し"self"パラメタを渡す必要があり、そうやってインスタンスデータにself経由でアクセスするのだ。
だからPythonの中のものはすべて、self、selfself、selfselfself、selfSELFselfSELF__SELF__であり、
たとえあなたがホワイトスペースの問題を気にかけないとしても、これはあなたの頭をおかしくするだろう。
配列に格納したものと一致しないものだけをピックアップしたかったのだが、
配列の中にその値があるかどうかの比較のしかたがわからずfor文でまわしました。
なんとなく感覚でequals()と==をつかいわけているが、もしかしたら違うかもしれない。
classのインスタンスというかイニシャライズに相当する書き方がわからず、
初期化が必要なクラスをつくることができず、ひとつのクラス内でダバダバ関数を書いている。
} catch(ArithmeticException e) {
System.err.println("エラー" + e.getMessage());
関数ごとにこんな風にいちいち書いてみたが、もっといいやり方があるきがする。
// デバック用出力関数
private void fDebug(String msg) {
if (!DEBUG_FLG){ return;}
System.out.println(msg);
}
挙句、こんな関数を作った。俺はバカかとおもった。
ログ出力用のヤツまでつくってしまった。いったいこれはどういうことだろう。
昔し、配列のsortを教えてもらった記憶があるのだが実はいまだにできない。
しかたが無いのでaddで任意の位置に足しているが、それをやるにもループ、配列.size()で分岐しながらなのでカッコワルイ。
勢いでつくった関数にオプショナルで引数を追加したくなったのだが、やりかたがわからなかったので諦めた。
Eclipseで一気に複数行をコメントアウトするような方法がわからない。
→わかった! ctrl+/だ! おー、便利。
気持ち悪いループとbreak文だらけになってしまいわかり難いのでラベルをつけた。
「label:」みたいにすればいいらしい。だが根本的に間違っている気がする。
Integerとintみたいなものを区別せずに使っている。実際何が違うのかわからないけど動くからいいやとかおもってしまっている。
@Overrideってなんだろう。
参照が深くなりすぎてしまって、ループの中でわざわざ変数を宣言しなおしている。
DDDDD masuda = AAAA.BBBB().CCCC(ohdeyansu);
ookamiotokoto = masuda.funga() + masuda.hajimeruzamasu();
どうなんだろうか。
何か計算結果がおかしいなとおもったら int * (int/int) で、分母が計算途中で丸められてた。
int * (float)(int/int) こんな回避の仕方をしてしまったのだがいいのだろうか。
たいしたことをしていないのだがやたらとコードが長くなる。
どうにかならんものか・・・。
Ruby,Windows COM APIの知識がそれなりにあることを前提としています。あしからず。
あと、用語の使い方は結構いい加減です。訂正ヨロ。
まずは、GoogleEarthをインストールしよう。http://earth.google.co.jp/ から無料でダウンロードできます。
次に、COM APIの登録。コマンドプロンプトで、GoogleEarthをインストールしたフォルダ(通常は、c:\Program Files\Google\Google Earth)に移動して次のコマンドを実行します(>は入力する必要はありません)。
>googleearth.exe /RegService
これを実行することによりCOM APIを介して外部から操作することが可能になります。
次にRubyの実行環境を整えます。が、説明が面倒なので省きます。ActiveScriptRubyでぐぐれ!
さて、ここから実際にGoogleEarthを動かしてみます。こういうときはirbが便利ですね。ActiveScriptRubyが正しくセットアップされていれば、デスクトップにRuby Consoleというショートカットができているはずです。これを起動すると、Rubyにパスが通った状態でコマンドプロンプトが起動するはずです。そこでirb(Enter)と入力してみましょう。
irb(main):001:0>
というふうに表示されればOKです。
どんどんいきましょう。irbで、
>require 'win32ole'
と入力してください(>は入力しません。プロンプトがでているという意味のお約束です)。これで、COM APIをRuby上で取り扱うことが出来るようになります。
次に、
>ge = WIN32OLE.new('GoogleEarth.ApplicationGE')
と入力しましょう。変数geがGoogleEarthのCOM APIのインタフェースのインスタンスになります。geのメソッドを呼び出すことによりGoogleEarthを操作します。GoogleEarthを起動していない場合、ここで起動されます。
では、いよいよGoogleEarthを動かします。GoogleEarthでは、視点情報をCameraと呼称しています。カメラを移動させるために、カメラ情報へのインタフェースを生成します。
>cam = WIN32OLE.new('GoogleEarth.CameraInfoGE')
この、camのプロパティを設定することによりカメラ情報を設定することが出来ます。
>cam.FocusPointLatitude = 35.0 =>35.0 >cam.FocusPointLongitude = 135.0 =>135.0
実際に入力するのは、1行目と3行目です。Latitude:緯度、Longitude:経度です。緯度は赤道を中心として+90(北方向)から-90(南方向)の値をとります。経度は+180(東方向)から-180(西方向)の値をとります。日本の場合、どちらも+になります。
実際に視点を移動させるには、先ほどのgeのメソッドを呼び出します。
>ge.SetCamera(cam,1)
GoogleEarthでの表示が切り替われば成功です。場所は日本どこかです。岡山のあたりでしょうか。
(つづく?)
http://anond.hatelabo.jp/20070411180408の人へ
Javascriptの言語仕様を読めば、語句があって構文があって構造化やらオブジェクトやら関数やらなんやらの作り方がわかる。
私もそれについては何の問題もなかった。少々、特徴はあるけれど、さほど困惑するほどのものではなかった。
ただ、それから先で、はたと困惑するんだよね。やりたいことをどう作っていけば良いのかわからない。それ、よくわかる。
Javascript(正確にはちょっと違うのだけれど)の特異な点は、こちらがJavascriptの枠組みで何か設計する前に、すでに互いに関連しあったインスタンスがある、または他の枠組み(HTMLやらXMLやら)でインスタンスを生成したあと、Javascriptで操作する、って所なんだ。
他の言語は、I/OやI/Fを設計して、それをその言語で作って操作して、という手順になるんだよね。プログラミングはそのI/OやI/Fを作ることから始まることが多い。
しかし、Javascriptはその部分のほとんどをインスタンスとしてブラウザが作った後に動く。すでに形になっているインスタンス群がある状態で動く。そして、プロトタイプ言語だから、インスタンスを作る際に他のインスタンスを使用する事が多い。
つまり、すでに出来ているインスタンス群の状態を知る、つまりDOMを知って、実際にどんなインスタンスが出来ているのか、どんなインスタンスを作ればよいのか、を知る必要がありました。
以上、prototype.jsも満足に使えないへぼい奴からの言葉です。
>http://www.geocities.co.jp/SiliconValley/8916/Macintosh/rimo.tv.screensaver.html>
rimo.tv.screensaverは、YouTube に掲載されている人気の動画から約1日おきに新しい番組プログラムを生成・配信する はてなのサービスである http://rimo.tvを表示するMacOSX用スクリーンセーバです。
<<
勝手にclass-dumpとstringsとotoolで調べたよ。概ね間違っていないと思う。
古い記事ですまないが。
「swk'slog」をきっかけに、mixiで多くの日記を拝見したり、はてなでアンケートを採らせていただいたりして調べてみると、ウィキペディアの略称として、「ウィキ」が使われることが非常に多くなっているようなのだ。
最初はへぇぇぇと思ったけど、ウルトラマンを初代ウルトラマンと呼んだりするようなことかと思い直す。
例えばブログのエントリで最近仮面ライダーって書かれてたらそれはまず仮面ライダーカブトのことだろうし、それが去年のエントリなら仮面ライダー響鬼のことになる。これは仮面ライダーという名詞があらゆる仮面ライダーのクラスで、特定のライダーを指さないおかげでコンフリクトが起きない仕組みになっているから問題ないのだけれども、一方で、ウルトラマンメビウスをウルトラマンと呼んだりなんかすると、ウルトラマンというのはインスタンスとしても存在するためにコンフリクトが生じる場合があるんで、こういった場合は逆にウルトラマンのことを初代ウルトラマンと呼んだり、初代とだけ呼んだりするなどエイリアスを作成することによってファンはコンフリクトを回避し、今ではそれが一般化されている。
なので、帰ってきたウルトラマンが出た以降みたく、WikiはWikipediaというさよなら三角が一般化されれば、(日本語圏内では)WikiそのものをWikiツールと呼んで区別したり、そのWikiツールの説明書きに「Wikipediaのように……」なんて書かれたりするようになっていくと思われるので、(日本語圏内だけの話だし)そこまで心配することでもないよね。
おそらくめたるまんの中の人にとってWiki = Wikipediaではなくて、今最も熱いWikiは別にあるんだろうなぁというところに落ち着いた。