トップページtech
1001コメント374KB

Ruby 初心者スレッド Part 40

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2010/12/11(土) 15:46:15
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

★注意★ Ruby 1.9.2 は初心者には若干時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。
 文字エンコーディング等の外部基礎知識が必要な上、不完全対応の第三者ライブラリでの問題の切り分けが手間です。
 迷う点の少ない1.8.7に習熟→おもむろに1.9.2の変更点のみ重点学習、とすればスムーズに移行できるでしょう。

関連スレやURLは>>2-5あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。

■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
 ・エラーメッセージの共通そうな部分やエラーの出るモジュール名でググる
 ・マニュアルで引っかかったクラスの記述を探す http://www.ruby-lang.org/ja/man/
 ・FAQを一応読む http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
 ・最終的にやりたいこと(もっとよい方法がある場合が多いので)
 ・エラーメッセージ(自力で訳さずなるべくそのままで)
 ・詳しい内容(「動きません」「うまくできません」では回答しようがない)
 ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
回答してくれた人には「ありがとう」のひとことをいってあげて。

■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
0478デフォルトの名無しさん2011/01/04(火) 18:22:11
最近はセッターなんて定義せずにHashでパラメータ与えるほうが多い気がする。
0479デフォルトの名無しさん2011/01/04(火) 18:23:27
45 名前:デフォルトの名無しさん投稿日:2009/12/07(月) 11:16:10
>>44
そういう考え方もある
内部変数名と同じ名前のpublicなメソッドを外部提供する理由は本来無い
ユーザーに提供されるべきは、もっと一段上の名称&機能なメソッドであるべき

 attr_writer :username, :password

ではなく

 def user_info(h={})
  @username, @password = h[:username], h[:password]
 end

とかのほうがいいんじゃね、みたいな考え

オープンクラスだし堅いこと言うなJava使えJavaって感じではあるが



こういう感じのことかな?
0480デフォルトの名無しさん2011/01/04(火) 18:24:23
>>474
attr_* が無為にガンガン使われまくってる現状を憂いてるのかもしれん
「インスタンス変数の操作はattr_系を使うほうがよい」みたいな思い込みみたいな
rdocがattr_を特別扱いしないだけで状況はかなり変わると思うんだがな
0481デフォルトの名無しさん2011/01/04(火) 18:28:38
proxy_addr と proxy_host ってひょっとして被ってね addr_port とかじゃねこれうんすまん>>477ミスった

>>479
あーそんなん
インスタンス変数名とメソッド名称をがっちり結び付けてるのが、なんかヤ
それが当たり前のように初心者に浸透してる感じなのが、更にイヤ
そういう attr_ で提供された微妙な名称のメソッドを使わざるを得ないときとか、もにょんする
0482デフォルトの名無しさん2011/01/04(火) 18:33:46
アクセサメソッドってものがそもそも泥臭いというか

def flag
 @flag
end
def flag=(val)
 @flag = val
end

じゃなくて

def use
@flag = true
end
def release
 @flag =false
end
def used?
 @flag
end

にしようよっていうような。
0483デフォルトの名無しさん2011/01/04(火) 19:18:25
たとえば、

class Point
 attr_accessor :x, :y
end

こういう場合に使うものだと思うけど。
0484デフォルトの名無しさん2011/01/04(火) 19:55:35
>>479
目から鱗だな。確かに複数のsetterが関数で存在する必然性はない気がする。
これは面白い。
0485デフォルトの名無しさん2011/01/04(火) 20:55:24
>>484
そうかえ?
0486デフォルトの名無しさん2011/01/04(火) 21:01:46
なんか大昔のめんどくさいOOP議論を思い出すな
0487Perl忍者 ◆M5ZWRnXOj6 2011/01/04(火) 22:15:36
6、Rubyコミュニティの何人かはクソのような振る舞いをやめろwww
6、Rubyコミュニティの何人かはクソのような振る舞いをやめろwww
6、Rubyコミュニティの何人かはクソのような振る舞いをやめろwww
6、Rubyコミュニティの何人かはクソのような振る舞いをやめろwww
6、Rubyコミュニティの何人かはクソのような振る舞いをやめろwww
6、Rubyコミュニティの何人かはクソのような振る舞いをやめろwww
6、Rubyコミュニティの何人かはクソのような振る舞いをやめろwww
6、Rubyコミュニティの何人かはクソのような振る舞いをやめろwww
6、Rubyコミュニティの何人かはクソのような振る舞いをやめろwww
6、Rubyコミュニティの何人かはクソのような振る舞いをやめろwww
6、Rubyコミュニティの何人かはクソのような振る舞いをやめろwww
6、Rubyコミュニティの何人かはクソのような振る舞いをやめろwww
6、Rubyコミュニティの何人かはクソのような振る舞いをやめろwww
6、Rubyコミュニティの何人かはクソのような振る舞いをやめろwww
6、Rubyコミュニティの何人かはクソのような振る舞いをやめろwww
6、Rubyコミュニティの何人かはクソのような振る舞いをやめろwww

0488デフォルトの名無しさん2011/01/04(火) 22:26:01
Rubyを使う以上は「Rubyらしく」と「オブジェクト指向らしく」はなるべく守るべきだと初心者なりに思う
0489Perl忍者 ◆M5ZWRnXOj6 2011/01/04(火) 22:47:52
オブジェクト指向つかわなくてもかけるじゃん(笑)
オブジェクト指向つかわなくてもかけるじゃん(笑)
オブジェクト指向つかわなくてもかけるじゃん(笑)
オブジェクト指向つかわなくてもかけるじゃん(笑)
オブジェクト指向つかわなくてもかけるじゃん(笑)
オブジェクト指向つかわなくてもかけるじゃん(笑)
オブジェクト指向つかわなくてもかけるじゃん(笑)

なに?wブロガーとかがOOPとかについてわめいてるから?wオブジェクト指向つかわなくてもかけるじゃん(笑)
オブジェクト指向つかわなくてもかけるじゃん(笑)
オブジェクト指向つかわなくてもかけるじゃん(笑)
オブジェクト指向つかわなくてもかけるじゃん(笑)
オブジェクト指向つかわなくてもかけるじゃん(笑)
オブジェクト指向つかわなくてもかけるじゃん(笑)
オブジェクト指向つかわなくてもかけるじゃん(笑)

なに?wブロガーとかがOOPとかについてわめいてるから?w
0490デフォルトの名無しさん2011/01/05(水) 01:11:17
raiseして放置するとスタックトレースの表示がだらだら出るじゃないですか。
あれを

begin
 raise
rescue => e
 p e # ここで表示させるにはどうすればいいですか?e.backtraceは寂しすぎる。
end
0491デフォルトの名無しさん2011/01/05(水) 01:43:45
callerかな
0492デフォルトの名無しさん2011/01/05(水) 15:11:46
eclipseでpを日本語で使うとコンソールに文字コードで表示されちゃわない?
putsなら問題ないんだけどな・・・
0493デフォルトの名無しさん2011/01/05(水) 18:50:54
関数的メソッド p が利用する String#inspect は、本当はニホンゴ文字として表示したがっているのだ
ユーザーの環境でニホンゴ文字が利用可能かの判断は、$KCODE の設定の有無を見てる
$KCODE が "NONE" であるなら、文字列を \123 等のバイト列表示に変換して標準出力に流す

てことで、適宜 $stderr.puts str.tosjis とかするか、$KCODE="s" した上で p str するかしれ
個人的には p でニホンゴ文字が表示されてしまうのは好きではない

設定の有無だけじゃなくて内容も見て自動で変換とかやって欲しくね、というのをやってるのが Ruby1.9.x
0494デフォルトの名無しさん2011/01/05(水) 20:25:54
>>493
なるほどサンキュー
0495Perl忍者 ◇M5ZWRnXOj62011/01/05(水) 22:25:26
Rubyとかww
Perl最強だぜ!
0496Yappo2011/01/06(木) 17:45:10
Perlだけしか使えないやつはばかやで
PHPも使えるけどな
0497まつもとひろゆき2011/01/06(木) 17:55:57
これはこれは やっぽさん恐れ入りますわー
0498まっつ2011/01/06(木) 18:16:05
せやなー
0499デフォルトの名無しさん2011/01/06(木) 18:32:31
Ruby 1.8.7 でメソッドの返りで return を使うと、
return を省略した場合に比べて遅いんだけど、そういうもんなのかな?
1.9 系ではほとんど変わらないみたいだけど。
0500nihen2011/01/06(木) 20:21:12
フンガ?
0501デフォルトの名無しさん2011/01/06(木) 21:39:26
>>499
1.8ではそういうもんです。
1.9では最適化されるのかも。
0502デフォルトの名無しさん2011/01/06(木) 21:52:48
puts RubyVM::InstructionSequence.compile(<<SCRIPT).disassemble
def sum(a, b)
a + b
end
puts sum(1,2)
SCRIPT

returnあってもなくても同じ結果になるね。
0503デフォルトの名無しさん2011/01/06(木) 23:59:24
初心者はまず最初に何を作ればいいの?
0504デフォルトの名無しさん2011/01/07(金) 00:13:38
俺はテキストフィルタだったな
Windowsのコマンドプロンプトは、標準だとテキスト処理のコマンド足りなさ過ぎだから
他の言語とかでコマンドプロンプト使う機会が多かった俺にはなかなか役に立った
0505デフォルトの名無しさん2011/01/07(金) 00:37:36
今必要なものを作ればいい
なければこれまでに必要になったものをもう一回Rubyで書いてみるとか
0506デフォルトの名無しさん2011/01/07(金) 01:08:28
テキストフィルターの作り方

0. 準備
パスの通っている場所を確保する
-S で起動できるかテスト
または *.rb に関連付けて、スクリプトファイルだけで実行できるようにする。

1. 第一段階
# オプションの -p や -n は使わない。
ARGF.each{ |line|
# ここに何か書く

print line
}

2. 第二段階
optparse または、getoptlong を使ってオプションを取り扱う

3. 第三段階
関数・メソッドを書いて、見通しを良くする
0507デフォルトの名無しさん2011/01/07(金) 07:10:00
>>503
メソッドの説明とかある程度見聞きしてサンプル写経してなお、
特に作りたいものも作れそうなものも思いつかないなら、
とりあえず一旦Rubyを置いて街に出て別なことやれ

必要になったらたぶんまたRubyに帰ってくるからさ
プログラミングなんて無理してやるようなもんでもねえよ
0508デフォルトの名無しさん2011/01/07(金) 07:53:15
>>496
Perl忍者やめろ
0509デフォルトの名無しさん2011/01/07(金) 08:54:49
おまえらホント暇そうだな
0510デフォルトの名無しさん2011/01/07(金) 16:32:36
unable to convert U+201D from UTF-8 to US-ASCII for lib/rdoc/text.rb

gem update したらエラーが出るよ〜
0511デフォルトの名無しさん2011/01/09(日) 16:57:18
XP&IRBでs="【1】"って入れるとなんかおかしくなる。
cmdだと特に乱れたりしないんだけど。
なんか文字コードの設定とかいるんですか?

>> s=" y1 z"
=> "【1\201z"
>> puts s
【1】
=> nil
>> `ruby -v`
=> "ruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mswin32]\n"
0512デフォルトの名無しさん2011/01/09(日) 17:08:29
>>511
String#inspectのバグ。お使いのバージョンの直後のp250で修正されてる。

あと、バージョンを出すときは、RUBY_DESCRIPTIONという定数があるよ。
0513デフォルトの名無しさん2011/01/09(日) 17:12:19
補足。
irbの出力は、最後に評価(実行)した式の値をinspectしたもの。
putsはinspectしないので化けない。
0514デフォルトの名無しさん2011/01/09(日) 17:46:52
>=> "ruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mswin32]\n"
>お使いのバージョンの直後のp250で修正されてる。
よく見たら一年前のバイナリ…

irb(main):008:0> RUBY_DESCRIPTION
=> "ruby 1.8.7 (2010-12-23 patchlevel 330) [i386-mswin32]"
に変えてみたところ症状は変わらず。

s="【1】"
を左から順番に打つと問題なく入力でき
s="【】"
と打ってからカーソルを戻して1を入れると
irb(main):006:0> s=" y 1z"
=> "【・z"
irb(main):007:0> puts s
【・z
のように崩れるみたいです。

窓の設定で関係ありそうなのはこれくらいですかね。
現在のコードページ
932(ANSI/OEM - 日本語 Shift-JIS)

とりあえず余所で打ってコピペすれば先に進められそうなので解決?しました。
ありがとうございます。
0515デフォルトの名無しさん2011/01/09(日) 17:50:42
部分的にでも表示されるってことは$KCODEは設定されてるのか。
0516デフォルトの名無しさん2011/01/09(日) 18:03:08
rubyopt=-Ks 〜〜
と環境変数を設定してあるので

>> $KCODE
=> "SJIS"

になってます。
0517デフォルトの名無しさん2011/01/09(日) 18:23:29
>>514
> 変えてみたところ症状は変わらず
いや変わっとるがな
String#inspect で最後の文字がバイト表現になるのはバグで、p330 で修正済み

irb において、バックスペースで Unicode の曖昧幅の記号文字を消すとその後のカーソル位置が不良になるのは
readline かターミナルエミュレータか何かが原因だろう
0518デフォルトの名無しさん2011/01/09(日) 18:35:22
・ 純粋なコマンドプロンプト上の話ではない
・ マルチバイト非対応のreadline.dllをパスのどっかで読み込んでいる
・ 誰も試してなかったが、半月前に出た 1.8.7-p330 の mswin32 の Readline が実は変

どれかなんじゃないかな
0519デフォルトの名無しさん2011/01/09(日) 18:47:06
案外3番目のような悪寒
0520デフォルトの名無しさん2011/01/09(日) 22:56:06
RubyInstallerか何かに添付配布されているrbreadlineじゃないよな

いやあれはそもそも不安定すぎて入力したらよく落ちるが
0521デフォルトの名無しさん2011/01/10(月) 00:24:32
アップデートしようとしてp330のzipをダウンロードしたのですが、展開したら中身がやけにいっぱいあってびっくりしてます。
今はp302で、Ruby187フォルダの中には「bin」「doc」「lib」「share」フォルダとアンインストーラしか入っていません。
失敗が怖くてまだ何もしていない状態なんですが、これはp330の中身を丸ごとコピーするというのとは違いますよね?
ここからどうすればいいんでしょうか?
0522デフォルトの名無しさん2011/01/10(月) 01:14:12
ActiveScriptRubyの拡張子がmsiのやつでインストールすれば?
0523デフォルトの名無しさん2011/01/10(月) 01:25:53
>>522
言われるまで全然気づきませんでした。
ありがとうございます。
0524デフォルトの名無しさん2011/01/10(月) 08:06:27
ローマ字表記などに使われているマクロン付の文字を
マクロンがつかないアルファベットに変換するにはどうすればよいですか

table = {"\u014c" => "O", "\u014d" => "o"} #他のは省略
table.each{|key, value| res.gsub!(key, value)}
puts res.encode("CP932", :undef => :replace, :replace => 'UGAAAAAAAAAAA')

こんな風にやってますけど、いい方法を教えてください
ruby 1.9.1p429 (2010-07-02 revision 28523) [i386-mswin32]
0525デフォルトの名無しさん2011/01/10(月) 09:14:12
require 'rubygems'
require 'addressable/idna'
def unicode_canonical_decomposition(one_char)
[Addressable::IDNA.__send__(:unicode_sort_canonical,
Addressable::IDNA.__send__(:unicode_decompose, one_char.unpack('U*'))
).first].pack('U')
end

str = "?, ?, ?, ?, ?"
puts str.split(//u).map{|s| unicode_canonical_decomposition(s)}.join #=> "a, e, i, o, u"

UTF-8 の「1文字」だけを unicode_canonical_decomposition に渡す
addressable gem をインストールしてない場合は gem install addressable

いくつか問題がある
いちばん大きいのは、Unicode 正規分解が可能なものはぜんぶ分解してしまうこと
これを制御することはできない

puts "ぱぴこ".split(//u).map{|s| unicode_canonical_decomposition(s)}.join #=> "はひこ"

"?" みたいな2文字+ダイアクリティカルマークに分解されるものは
unicode_sort_canonical の返り値からアルファベットだけ探すという処理を入れないと無理
str = "?"
puts str.split(//u).map{|s| unicode_canonical_decomposition(s)}.join #=> "a"

あと、うっかり Ruby1.8 でサンプル作ったので 1.9 に変換するのめんどい

自力で好みのテーブルを作って置換するのがいちばんだと思う
0526デフォルトの名無しさん2011/01/10(月) 09:19:21
ああ、なんかもう当たり前のように化けてるな

require 'rubygems'
require 'addressable/idna'
def unicode_canonical_decomposition(one_char)
[Addressable::IDNA.__send__(:unicode_sort_canonical,
Addressable::IDNA.__send__(:unicode_decompose, one_char.unpack('U*'))
).first].pack('U')
end

str = "ā, ē ī ō ū"
puts str.split(//u).map{|s| unicode_canonical_decomposition(s)}.join #=> "a, e, i, o, u"
str = "ぱぴこ"
puts str.split(//u).map{|s| unicode_canonical_decomposition(s)}.join #=> "はひこ"
str = "ǣ"
puts str.split(//u).map{|s| unicode_canonical_decomposition(s)}.join #=> "a"
0527デフォルトの名無しさん2011/01/10(月) 09:27:05
Unicode正規化の合成・分解はActiveSupport::Multibyteでも出来るかも。
0528デフォルトの名無しさん2011/01/10(月) 09:46:55
>>525-527
addressableもActiveSupport::Mulibyteも使ったことないので
これを機に試してみます。ついでに逃げてきた文字コードの
勉強することにします。ありがとう
0529デフォルトの名無しさん2011/01/10(月) 09:50:44
Rubyでは関数に引数を渡すと、参照渡しになるのでしょうか。
たとえば関数の引数に配列を渡し、関数内でその配列を操作すると、もとの配列が変更されてしまいます。

def f(arg)
 arg << "x"
end
arr = ["a", "b"]
f(arr)
p arr #=> ["a", "b", "x"]

これがPHPなら、argを変更してもarrは変更されないのですが、Rubyは違うようです。
つまり、Rubyは参照渡しだということなんだと思いますが、あってますでしょうか。

0530デフォルトの名無しさん2011/01/10(月) 10:08:38
>>528
require "rubygems"
require "babosa"
p " ".to_slug.approximate_ascii.to_s #=> "aeiou"

でよくね?
0531デフォルトの名無しさん2011/01/10(月) 10:10:49
>>529
あってる
0532デフォルトの名無しさん2011/01/10(月) 10:13:29
>>530

babosaってなんじゃらほい、と思ってググったが、URLのslugを作るライブラリか。
0533デフォルトの名無しさん2011/01/10(月) 10:40:05
すらぐってなんすかね

…はあ、ページが提案する(またはページタイトル等から生成される)、
動的または投稿で作られたページの固定URLを表現する際に使ってもよい文字列
このスレをミラーするページのURLがttp://example.com/2chview/Ruby-Part-40になるみたいなもんか

アスキー文字っぽいものはURLとして読みやすいアスキー文字に揃えてしまうという機能がついてるのね
0534デフォルトの名無しさん2011/01/10(月) 10:47:27
>>529
実のところ「参照渡し」ではない
参照渡しだとして理解すると本当は危険
というか参照渡しとはなんぞやという面倒な話に
0535デフォルトの名無しさん2011/01/10(月) 10:49:50
「オブジェクトそのものを渡しているわけではありません」という慎重な表現が
0536デフォルトの名無しさん2011/01/10(月) 10:53:52
>>529
Rubyに関数は(ry


irb(main):001:0> def f(arg)
irb(main):002:1> arg = [0, 1, 2, 3]
irb(main):003:1> end
=> nil
irb(main):004:0> ary = [4, 5, 6, 7]
=> [4, 5, 6, 7]
irb(main):005:0> f(ary)
=> [0, 1, 2, 3]
irb(main):006:0> ary
=> [4, 5, 6, 7]

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/1534
>rubyには値渡ししかなく引き数として与えられた変
>数の値を変えても元の式の値は変わりません.ただし,オブジェク
>トの参照が渡るので値に対して破壊的な操作は可能です.

Rubyの変数は「ラベル」として考えるもので、メソッドの引数は「ラベルの値渡し」をしている。「オブジェクトの値渡し」ではなく。
とりあえずググればいろいろ出てくるよ。
0537デフォルトの名無しさん2011/01/10(月) 13:37:36
いろいろ出てくるがかなりの確率で、内容がハズレだ
0538デフォルトの名無しさん2011/01/10(月) 13:44:20
過去スレで書かれたもののほうが短さと適切さのバランスが取れてる気がする
0539デフォルトの名無しさん2011/01/10(月) 13:57:53
そこら辺はJavaと全く同じだからJava経験者なら分かりやすいだろう
0540デフォルトの名無しさん2011/01/10(月) 16:34:15
関係ないんだけど配列の値渡しってどんな実装?
0541デフォルトの名無しさん2011/01/10(月) 17:22:45
PHPみたいに配列の中身がごそっとコピーされるようなものを期待しているとしたら、
自分でそのように書かない限り、Rubyにそのようなものはないぞ。
0542デフォルトの名無しさん2011/01/10(月) 17:42:26
すごいよMarshalさん
0543デフォルトの名無しさん2011/01/10(月) 18:41:57
そうそう、Marshal 経由でコピーがあったね。
0544デフォルトの名無しさん2011/01/10(月) 20:46:00
NokogiriでHTMLをパースしたいのですが、
 のようなエスケープ文字が勝手にアンエスケープされてしまい、困っています。

html = Nokogiri(<html><body>こんにちは テストです。</body></html>)
text = html.search('body').first

textの中身は以下のようになってしまいます。
<body>こんにちは テストです。</body>

 のようなエスケープ文字をそのまま保持させる方法はないでしょうか。
0545デフォルトの名無しさん2011/01/10(月) 20:50:42
↑すいません、訳分からない文になってしまいました。
再投稿します。


NokogiriでHTMLをパースしたいのですが、
&nbsp;のようなエスケープ文字が勝手にアンエスケープされてしまい、困っています。

html = Nokogiri(<html><body>こんにちは&nbsp;テストです。</body></html>)
text = html.search('body').first

textの中身は以下のようになってしまいます。
<body>こんにちは テストです。</body>

&nbsp;のようなエスケープ文字をそのまま保持させる方法はないでしょうか。
0546デフォルトの名無しさん2011/01/10(月) 21:11:49
HTMLにエスケープ文字はない

はともかく、実体参照の解決はlibxmlが制御できんとこで自動でやってるので制御できん
ナマのHTMLを取得する手段はないと思ってくれていい
05475452011/01/10(月) 21:24:23
>>546
おおおそうだったのか。。
よく分かりました。貴重な情報ありがとうございました。
0548デフォルトの名無しさん2011/01/10(月) 22:25:00
そういうときはhpricot使ってる
0549デフォルトの名無しさん2011/01/11(火) 00:00:25
Rubyの引数は値渡しだという話題これで何度目だよw

>>529
参照渡しにはならないよ。値渡しだよ。あえていうなら「参照の」値渡しだよ。

そもそもPHPもデフォルトはメソッドの引数も値渡しのようだが
PHP: 関数の引数 - Manual - http://php.net/ http://php.net/manual/ja/functions.arguments.php

代入の話かと思ったが代入演算子もオブジェクトの場合は参照がコピーされるようだぞ
PHP: 代入演算子 - Manual - http://www.php.net/ http://www.php.net/manual/ja/language.operators.assignment.php

>>531
まーたデタラメを広めるなw
0550デフォルトの名無しさん2011/01/11(火) 00:01:23
URLコピペミスした。気にしないで。
0551デフォルトの名無しさん2011/01/11(火) 00:31:00
>>549
初心者スレだからしょうがない面はあるだろ

>>531はなにゆえ断言したのか…
0552デフォルトの名無しさん2011/01/11(火) 06:12:37
オブジェクトの内容を参照するための情報を引数として渡しているのは間違いがない
ただ、それは「参照渡し」とは違う
0553デフォルトの名無しさん2011/01/11(火) 06:36:01
参照渡しはC言語にしか存在しないのでC言語以外でこの言葉を使用するのを禁止するって法律に書いとけ
0554デフォルトの名無しさん2011/01/11(火) 07:15:52
>>553
C 言語には「存在しない」が。全部値渡しだぞ、あれ。渡してる値が整数だったりポインタだったりするだけだ。
C++ や Pascal には参照渡しがある。
0555デフォルトの名無しさん2011/01/11(火) 07:29:37
というか参照渡しとはなんぞやという面倒な話に

ある言語の概念を他の言語に無理矢理適用しようとするのやめようぜ
0556デフォルトの名無しさん2011/01/11(火) 07:39:52
やっぱり紐だよ紐。
変数は荷札。引数は荷札と紐を渡す。
0557デフォルトの名無しさん2011/01/11(火) 07:47:14
ユビキタスシステムが普及して万引きが減ると良いね
0558デフォルトの名無しさん2011/01/11(火) 09:19:51
やたー
名前渡しできたよー

def namae(arg)
  eval "#{arg} = 999"
end

$hensu = 1
namae :$hensu
p $hensu #=> 999
0559デフォルトの名無しさん2011/01/11(火) 10:12:05
Cのポインタ渡しは参照渡しだろうという説はある
Cには参照渡しが「ないからこそ」、Cでのポインタ渡しは
ポインタ以外を渡す行為と対称して参照渡しと呼ばれるのだな

Cだけの世界では、>552的な意味で間違ってはいない

まあ、汎用な計算機科学っぽい事象かと思ったら
特定の言語実装べったりのローカル概念でしたというのは
稀によくある
0560デフォルトの名無しさん2011/01/11(火) 10:31:15
単に誤用してるだけだな。
たまに俺の用法で辞書書き換えろとか言い出す困ったちゃんもいるが。
0561デフォルトの名無しさん2011/01/11(火) 11:13:22
> Cには参照渡しが「ないからこそ」、Cでのポインタ渡しは
> ポインタ以外を渡す行為と対称して参照渡しと呼ばれるのだな

呼ぶな。

C++ には本物の参照渡しがあるし、早速混乱するぞ。
0562デフォルトの名無しさん2011/01/11(火) 11:18:39
Cしかやらないのなら問題はないし、Cで終わる人も多かろう

というか値渡しだって「値を渡してるから略して値渡しなんだよね」と認識してる人が大多数だろう
「ポインタという名前の参照用情報を渡してるから略して参照渡しと呼ぶね」と認識することを責めることはできん
0563デフォルトの名無しさん2011/01/11(火) 11:26:34
C++もやる人と同じプロジェクトに放り込まれて混乱するわけですな。
0564デフォルトの名無しさん2011/01/11(火) 11:26:43
めんどくせえ…

 ・ 不用意に略語にするな
 ・ あなたのプログラミング上の造語はほぼ確実にどっかの専門用語だ
 ・ 正しい語を使って話せ

でいすか
0565デフォルトの名無しさん2011/01/11(火) 11:28:42
お前ら一体何十回同じ話ししてんのかと
技術解説+理解を促進させるサンプルがあれば
不正確な比喩表現なんて必要ない
0566デフォルトの名無しさん2011/01/11(火) 11:34:37
>>565
説明表現を考えているわけではない

「それは〜〜が〜〜で〜〜〜なわけだ」
「なるほど○○なんですね」 ← これ
「いや違う」

をなんとかしようなんとかできんなという話だ
0567デフォルトの名無しさん2011/01/11(火) 11:37:37
>>566
いや違う〜は〜って意味だから覚えてね、でOKじゃん。
0568デフォルトの名無しさん2011/01/11(火) 11:38:11
読むだけ時間の無駄。
0569デフォルトの名無しさん2011/01/11(火) 11:43:20
基本、Cしか知らない人はRubyしか知らない人並みに害悪を撒き散らす
適当な壷の中にでも封印しておくのがよい
0570デフォルトの名無しさん2011/01/11(火) 21:43:01
>>556
紐ってどういう例え?
0571デフォルトの名無しさん2011/01/11(火) 21:45:22
その話もう終わってるから
0572デフォルトの名無しさん2011/01/11(火) 21:51:56
何らかのクラスやモジュールの定義をスクリプトとして視覚化というか文字列化というか、可能?
ぶっちゃけツクールの組み込みクラスなんだけども、どう定義されてるか見てみたいんだ。
0573デフォルトの名無しさん2011/01/11(火) 22:19:24
どのツクールだよ
0574デフォルトの名無しさん2011/01/11(火) 22:21:02
XPのInputとかWindowとかが見たい
できたらいいなとは思うんだけどやっぱり無理かな
0575デフォルトの名無しさん2011/01/11(火) 22:37:32
> InputとかWindow

rubyにそんな機能はないです
0576デフォルトの名無しさん2011/01/11(火) 23:10:38
「ツクールの組み込みクラス」って書いてあるのにその突っ込みはないわー
0577デフォルトの名無しさん2011/01/11(火) 23:42:04
>>574
詳しく知らんがRPGツクールだろ

>>574
ソースを見たいということならば、そのInputやWindowがネイティブコンパイルされた拡張ライブラリでないなら
中身を見られるかもね

でも確かファイルやライブラリは暗号化されていたはずだから、なんらかの方法で復号化のメソッドを探せばいんじゃないかな
ただ拡張ライブラリ内で復号化してそのまま読み込まれていたら面倒だな
■ このスレッドは過去ログ倉庫に格納されています