[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 05/09 23:56 / Filesize : 233 KB / Number-of Response : 880
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Ruby 初心者スレッド Part 33



1 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 14:21:25 ]
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

★注意★ Ruby 1.9.1 は初心者にはまだ時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。
   (理由:現時点では多くの有名ライブラリやアプリが 1.9.1 に完全対応していないためです。)
 1.8.7 でも 1.9 系に導入された新機能のいくつかが利用可能なため、1.8.7 を習得すれば将来スムーズに 1.9 系に移行できるでしょう。

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

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

■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。

384 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 13:52:22 ]
>>382
テストが通らないタイミングでファイルを保存したりしないの?
というか編集途中で保存し辛くなりじゃん

385 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 13:54:01 ]
なるじゃん

386 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 14:12:02 ]
ファイルいっこのテスト方法がないわけじゃなかろう
autotestを使うかどうかとはまた別の議論だと思う

387 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 15:17:10 ]
>>382
コードを保存したいタイミングと、テストを走らせたいタイミングは別じゃね?
エディタからテストを実行させられればそれでいいけどなあ。
わざわざ保存したときに勝手にテストが走ってほしくないよ。

388 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 18:03:22 ]
かりに毎回毎回コマンドラインからテストするとしても
シェルの履歴ぐらい使うだろう。


389 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 18:27:27 ]
秀丸とかサクラエディタとか外部コマンドを
実行できるテキストエディタを使うがよろし。
俺はVim使ってるけど。

390 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 18:36:19 ]
俺はタブ機能付きの端末エミュレータ使って
右端のタブをテスト用に使ってる
タブ切り替えにキーを割り当ててやるとかなり快適だ

同じ用途で GNU Screen とか使ってる人もいるのでは?

391 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 19:41:16 ]
auto-save-buffersつかってるとautotestは使えない

392 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 21:51:25 ]
>>387
そうかー、その品は人それぞれだな。

autotest連携で結果をSnarl(今ならGrawlか?)で通知出したり、サウンド出したりしてるけど
けっこう快適よ?
ただ、coLinuxで動かすとその辺の連携がしにくくて困る

さらに、AutoHotKeyで保存キー入力と同時にブラウザリロードとかもやってる。



393 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 01:40:48 ]
自動保存+すきあらば無意識で手動保存してるから、
保存とか意識したことがないなー。


394 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 09:39:55 ]
warning: Insecure world writable dir /home in PATH, mode 040777
という警告がでて困ってます。
この警告だけを出さないようにする方法があれば教えてください。

home のパーミッションが 777 なのがおかしい!といわれればそうなんですけど、
下請けにはそんなことすら変更する権限がないんです。



395 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 09:47:09 ]
>>394
知らんよ
RailsはRailsスレで

396 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 10:47:41 ]
>>394
環境を詳しく

もしRailsなら権限くれっていえ。まともに開発できんから

397 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 11:31:38 ]
>>394
ENV['PATH']から /home を抜け。


398 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 11:33:56 ]
ENV['PATH']つーか、rubyを実行する前だからシェルの環境変数PATHね。


399 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 11:52:12 ]
>>395
なぜRails?

>>396
環境はlinux 2.6.9-89.EL, ruby 1.8.7-p174です

>>397
$PATHには/homeがないけど、/home/username/binがあります。
これを除くことはできないので、どうしたもんか困ってます。



400 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 12:28:44 ]
フルパスで実行するようにすれば除けるんじゃないの?


401 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 12:32:16 ]
あくまでrubyに伝わるPATHだけ変わればいいので、

* コマンドの環境だけ変える。
PATH=/usr/bin:/bin(などなど) ruby 引数
とか

* 一度変えて戻す
OLD_PATH=$PATH
PATH=/usr/bin:/bin(などなど)
ruby 引数
PATH=$OLD_PATH
とか

* サブシェル内で変える
(
PATH=....
ruby
)

とかでもいい。


402 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 16:39:54 ]
RubyGemsで依存関係を調べる方法ないですか?
gem dependency を使ってみているんですがうまくいきません。

$ gem dependency mechanize -v "0.9.3" --remote
Gem mechanize-0.9.3
nokogiri (>= 1.2.1, runtime)
hoe (>= 1.12.2, development)

$ gem dependency mechanize -v "0.9.0" --remote
No gems found matching mechanize (= 0.9.0)

$ gem dependency mechanize -v "<0.9.0" --remote
Gem mechanized_session-0.0.2
mechanize (>= 0.9.3, runtime)
hoe (>= 2.3.3, development)

何がやりたいかというとmechanizeでnokogiri非依存のバージョンを探したいのです。



403 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 16:56:21 ]
>>402
WWW::Mechanize.html_parser = Hpricot

404 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 17:04:10 ]
>>402
libxml2 に依存したくないというのなら>>403
Nokogiri のインストール自体を dependency 経由で行って欲しくないというのなら、Mechanize 0.8.4 かそれ以前が必要

405 名前:402 mailto:sage [2009/12/24(木) 17:13:20 ]
即レスありがとうございます。

>>403
あー、いや、Bundlerで利用しようとしておりまして、
実行環境ではNokogiriが動かないため依存段階そのものから外したいのです。

# 実際はappengine-jrubyでmechanizeを使いたいという難儀なアレなのです
# jruby版Nokogiriはffi依存のせいでappengineでは動かんのですわ・・・
appengine-jruby - Project Hosting on Google Code
code.google.com/p/appengine-jruby/

>>404
ありがたい
0.8.4ですね、試してみます。

後学のために聞きたいのですが、こういうのってどうやって調べられるもんなんでしょうか?
以前はgemコマンドでgemのパッケージ時の設定を見る方法があったような気がしたのですが、どこいったんでしょう?

406 名前:402 mailto:sage [2009/12/24(木) 17:16:34 ]
>>405 の前半の説明が足りないので補足。
mechanize 0.9.3では >>403したいところなんですが、
require 'mechanize'
するだけでffiねーぞゴラァ(appengine版のjrubyでは含まれてないためらしいです。pure java版Nokogiriが望まれます)
のエラーがでてしまうのです。

407 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 17:20:09 ]
>>405
何もしてない
賞味3分の力技
add_dependency から Nokogiri が消えるまで mechanize.gemspec の github 履歴を直接調べて遡った

408 名前:デフォルトの名無しさん [2009/12/24(木) 18:55:35 ]
参考までに聞きたいのですが、
長くなり過ぎたメソッドチェーンの途中に改行を入れる場合、
皆さんはどこで改行するのが適切だと思いますか?

1) ピリオドの後に \
value = this.is.a.\
very.long.method.chain

2) ピリオドの前に \
value = this.is.a\
.very.long.method.chain

3) そもそも途中で改行しない

value = this.is.a
value = value.very.long.method.chain


409 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 19:03:30 ]
>>408
長くなりすぎたと感じる時点で「よくないコードの匂い」なので、リファクタリング開始

410 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 19:13:53 ]
>>408
メソッドチェーンでは改行は入れない
今更80文字制限などとは言わないが、メソッドチェーンで長い場合は途中変数で分ける
該当するとすれば3

411 名前:408 mailto:sage [2009/12/24(木) 19:16:52 ]
>>409
長くなり過ぎた場合という表現にちょっと語弊があったかも知れません。
実際にはメソッドのブロック付き呼び出しが2〜3続くような場合で
どうしても1行には収まらない場合、です。例をあげると

files = Dir.glob("**/*.rb").select {|file| ... }.reject {|file| ... }.map {|file| ... }

のようなパターンです。


412 名前:402 mailto:sage [2009/12/24(木) 19:18:31 ]
>>407
ΩΩΩな、なんだってー。恐れ入りました。そんな手がw

gem dependencyやgem specコマンドは--remoteのときには最新版からしかとれないんですね。
一旦gemをインスコしたらOK見られるようですが・・・



413 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 19:19:43 ]
>>408 >>411
files = Dir.glob("**/*.rb").select {|file| ... }.
    reject {|file| ... }.map {|file| ... }

って俺はやってるな

414 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 19:20:46 ]
>>410
> メソッドチェーンでは改行は入れない

>>411 であげたようなパターンでもそうなのですか?
自分はああいうパターンだとピリオドの後で改行しちゃうのですが、
一般的には推奨されない(マナーの悪い)書き方なのでしょうか


415 名前:408 mailto:sage [2009/12/24(木) 19:24:34 ]
>>413
ピリオドの後は \ なくてもいいんですよね。
自分の場合意図的な改行であることを明示するために \ を付けてます。

というか、>>411 の例は最後の map が意味的におかしいですね、しまったorz

416 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 19:29:58 ]
files = Dir.glob("**/*.rb").select{|file|
      ...
    }.reject{|file|
      ...
    }.map{|file|
      ...
    }

417 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 21:32:51 ]
ワンライナー書いてるならともかく、どっかで区切れよと
なぜそんなにつなぎまくるのかと

418 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 22:41:13 ]
>>417
自分の場合はつなぐというより、
つながっていくという感じでついつい長くなってしまうw
返値を無駄にしたくないというか

変数の名前を processed_values とかにした場合も名前に引きずられて
途中の状態を入れたくないという雑念が生じ、無理してでも一連のチェーンで書いちゃう


419 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 01:09:13 ]
Ping打ちたいんだけどどう書くの?

420 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 01:25:21 ]
>>419
ttp://www.sakalab.net/prog-ruby/ruby-man-html-20080121/ping.html

421 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 01:35:21 ]
俺もそれ出そうかと思ったけど、ICMP使わないんだよな

422 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 01:38:51 ]
わかりやすくていいじゃん



423 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 05:59:43 ]
files = Dir.glob("**/*.rb")
files.reject! {|file| ... }
files.map! {|file| ... }

424 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 09:08:05 ]
>>423みたいに例示依存の回答する人なんなの

425 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 09:21:57 ]
実際には存在しないメソッドを使って質問したほうがいいな

426 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 09:54:59 ]
別にいいんじゃない?
破壊的メソッドが使える状況なのに気づかなかった初心者がいてもおかしくないし
役に立たないならスルーすればいい
回答者にエスパーを要求するっていうのはそういうことだと思う

427 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 12:03:27 ]
1.9 だと メソッドのピリオド前でも改行できるようになった
複数行のメソッドチェーンのピリオド位置をそろえられるらしい

if とか class とか直後に識別子や式が必須のところは改行しても行が継続するとか
そういう行継続のルールってマニュアルあるの?


428 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 12:16:41 ]
従来のルール
「改行までの箇所を読んで完結していると見なされる(パースできる)ことがないなら改行OK」
に追加されたのは「メソッド呼び出しのピリオドの前もOK」だけのはず。



429 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 12:18:40 ]
あれ、>>428 のルールだけでは
class Hoge
で改行が許されるのは説明できないのか。


430 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 15:44:18 ]
>>429
ん? 説明できてるように思うけど
class Hoge って end で閉じるまで完結しないでしょ

431 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 16:16:30 ]
1.8.7p174

puts 1+
2
これは3と出る。+がまだ完結していないから2までがまとまって解釈される。

puts(1+
+2)
同じく3。

puts 1
+2
これは1までで完結しているから1と出て、+2は単項演算して捨てられる。

puts(1
+2)
これは unexpected tINTEGER, expecting ')'
次の行まで見て完結させてくれないのはどうして?




432 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 16:22:47 ]
パーサをそんなにいじめるなよ



433 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 16:57:33 ]
>>431
パーサには puts (1 2) と見えてる(+ は単項演算子と解釈されてる)

puts (1
+ 2)
だといけるかなと思ったが syntax error, unexpected '+', expecting ')' だった
ruby 1.8.7 (2009-06-12 patchlevel 174) [i486-linux]


434 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 19:49:28 ]
> puts 1
> +2
> これは1までで完結しているから1と出て、+2は単項演算して捨てられる。

↑ここまできたら

> puts(1
> +2)

これは駄目ってわかりそうなもんだろw

435 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 20:00:39 ]
>>434
kwsk

436 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 20:05:56 ]
puts(1\
+2)

437 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 20:08:58 ]
>>434
どうして?
>>436
解決法を求めてるわけじゃないぜ。


438 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 20:30:44 ]
()の構文は(式)。
(1 と書くと1は完結した式と解釈され、次の行には残りの)しか書けない
ってことでok?

439 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 20:42:13 ]
ずいぶんしみったれてるな。
'('が出て来たら')'の直前までを式と解釈してくれても良さそうなもんだが

440 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 21:15:20 ]
Rubyのパーサは(人間にすると)曖昧な解釈だからなw

>>437
puts 1
+2
が駄目なので、演算子を行末におかない場合は次行と連結されないため、式として認識しない、までは認識できるだろう。

なので、次の
puts (1
の時点で次行とは連結されないでその行までで解釈される、と考えられるので、
閉じ括弧がその行にないのでエラーとなる、と

そういうふうに頭がさっと回らない、ということならばあなたがRubyに慣れていないか、
もしくは俺が長い行を複数行に分割するのに慣れすぎているのでそう感じてしまうだけかw

441 名前:デフォルトの名無しさん [2009/12/25(金) 21:24:09 ]
puts((3
+ 4)) # => 4
とかRubyって面白いね

442 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 21:29:45 ]
もろくも崩れ去った俺(=>>438)の推理orz
>>441はどういうことなの?




443 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 21:42:32 ]
えっ?
ここ初心者スレなんですけど

444 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 23:05:02 ]
>>443
初心者にも有益な話題じゃない?
式が完結してしまうところで不用意に改行して構文エラーも出なくて
なんでうまく動かないんだみたいな落とし穴を回避するにはこういう知識も必要

445 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 23:06:30 ]
バッドノウハウに近いと思う
改行が有効な個々の場合を記憶する理由はない

446 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 23:08:31 ]
初心者は構文解析何それおいしいのだし
妙なところで改行打つような真似もしないだろう

447 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 23:12:13 ]
結論 とても長い式文でもない限り途中で改行すると見づらいし誤作動の原因になりかねないからやめれ。

448 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 23:14:12 ]
メソッドチェーンはとても長い式文に入りますか?

449 名前:デフォルトの名無しさん [2009/12/25(金) 23:54:41 ]
>>441
puts((3;+4))
と同じ

450 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 00:29:37 ]
>>444
>>443>>440に対して
初心者スレで何で
>そういうふうに頭がさっと回らない、ということならばあなたがRubyに慣れていないか、
なこと言うのってことだ

451 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 00:34:38 ]
puts (3;+4) はエラーで
puts((3;+4))は通るのは何で?

452 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 02:20:30 ]
前者、おそらく”(”がメソッド引数の括弧だと読まれている
引数部に”;”があるのはおかしいからエラー

後者、(3;+4)は4に等しいから、
puts(4)と同じ。もちろん文法的に正しい



453 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 02:43:20 ]
なぜこんな仕様にしたし

454 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 04:56:34 ]
括弧の省略を可能にするため、とマジレス

455 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 07:52:07 ]
>>451
引数を括る括弧と、式としての括弧は別

456 名前:デフォルトの名無しさん [2009/12/26(土) 21:00:18 ]
質問です。
include して使われることが想定されているモジュールを書いているのですが
非公開の下請けメソッドの扱いについて悩んでいます。
include先で名前の衝突が起こらないようにするため、以下の方法を考えたのですが……

1、適当な接頭辞をつける → 衝突はしにくくなるけどしないとは言えないw
2、モジュールメソッドにしちゃう → 非公開じゃなくなるw
3、モジュール内部に Privateモジュールを作り、Private.method でアクセス
→ Privateモジュール自体は非公開にできないけど、includeする側からアクセス
されることはまずないだろう

他にもっとよい方法というか、こういう場合のイディオム、定石のようなものが
あったら教えて欲しいです。

457 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 22:19:29 ]
>>456
実用上は
>1、適当な接頭辞をつける → 衝突はしにくくなるけどしないとは言えないw
で十分。それでも心配なら接尾辞もつけるといい。
(もちろん衝突しやすい接頭辞は避けてね)

458 名前:456 mailto:sage [2009/12/27(日) 08:57:11 ]
>>457
わかりました。接頭辞をつけておくことにします。
あまり長すぎるとうるさくなるんで、
アンダースコア+モジュール名を3文字くらいに圧縮したもの ぐらいでいいかな。

459 名前:デフォルトの名無しさん mailto:sage [2009/12/27(日) 09:43:27 ]
インスタンスメソッドである必要がないなら非公開にする必要もないと思うんだけど
個人的には3かな、Hoge::Utilsとか

460 名前:デフォルトの名無しさん mailto:sage [2009/12/27(日) 11:37:54 ]
>>456
>1、適当な接頭辞をつける → 衝突はしにくくなるけどしないとは言えないw

スクリプト言語は変数の型についてはいいかげんだし、カプセル化についてだけ厳密性を求めてもしょうがないと思う。
もともとそういう言語じゃないんだよ、スクリプト言語は。
接頭辞や接尾辞をつけるだけでは衝突する可能性はゼロにできないけど、実用上は問題ないから、それでよしとしてください。

461 名前:456 mailto:sage [2009/12/27(日) 17:37:52 ]
>>459
> インスタンスメソッドである必要がないなら非公開にする必要もないと思うんだけど
> 個人的には3かな、Hoge::Utilsとか

Helpers とかもそうですね。
外部から利用しても役に立ちそうなメソッドなら積極的にそうすべきかも

>>460
> カプセル化についてだけ厳密性を求めてもしょうがないと思う。
> もともとそういう言語じゃないんだよ、スクリプト言語は。

そういうもんですか。
サブクラスに対して閉じるアクセス制御って今後もできないんですかね

462 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 01:40:43 ]
>>461
たぶんRubyでのprivateを勘違いしている。
Javaと違うから、マニュアルを読むことをお勧めする。



463 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 04:42:17 ]
可視性メモ
ttp://www.rubyist.net/~matz/20070208.html#p04

464 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 06:26:05 ]
>>462
名前の衝突を懸念している時点で勘違いはしてないと思うのだが

465 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 12:17:10 ]
>>464
「サブクラスに対して閉じるアクセス制御」と言ってる時点で勘違いしてると思う。

466 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 12:41:29 ]
あればいいのにって話だろ

467 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 12:45:35 ]
Rubyではアクセス制御はそもそもできない
可視性を決めるだけ

468 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 16:09:11 ]
>>466
不要です。
以上。
↓はい次の方。

469 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 16:12:49 ]
↓    本質的にはオープンクラスを諦めないといけない
↓    再オープンできる時点で制御も何もねえよ


470 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 18:21:24 ]
本質的にはMatzの設計次第

471 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 20:04:43 ]
サブクラスに上書きされない為にどうしたらいいかって質問なのに
勘違いしてるとか不要とか諦めろとかどーゆー事よ
質問者の方がよっぽどrubyの事を理解してると思うわ

472 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 20:07:14 ]
Matzに聞いたら、
サブクラスで気をつけれ
っていうに決まってそう



473 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 20:15:49 ]
>>471
だからシステム的にできねえって
新しいRuby実装を自分で作れば無論可能だが、そういう回答を求めているわけではあるまい

474 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 20:18:15 ]
>>471
じゃあ、おまいが答えれ

475 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 20:57:46 ]

set_position x, y, z
get_positionX

みたいなget,set関数を作りました。
setはともかくgetはつけずに

positionX

の方が良いですか。どちらがよりRubyっぽいか教えてください


476 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 21:00:26 ]
x メソッドや y= メソッドだと都合が悪い?

477 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 21:06:09 ]
ziki.position = [x,y,z]
puts ziki.position_x

ですか???
そっちの方がRubyっぽいならそれでも良いです

478 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 21:20:17 ]
混乱してきたので質問を変えます。
AとBについてどちらが良いですか?

A:
(1) my.position = [1,2,3]
(2) my.set_position 1, 2, 3

B:
(1) puts my.position // 配列
(2) puts my.position_x

479 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 21:39:37 ]
>>478
[x, y, z] の組が頻出なら Struct を使ってもいいかも
Point = Struct.new(:x, :y, :z)
my.position = Point.new(x, y, z)
my.position.x

480 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 21:48:58 ]
>>478
attr_accessor, attr_writer, attr_reader とかは知ってる?

481 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 22:07:20 ]
>>479のPointを使って
class My
 attr_reader :position
 def initialize ; @position = Point.new ; end
 def position=(xyz)
  @position.x,@position.y,@position.z = xyz # 要引数チェック
 end
end

my = My.new
my.position = [0,0,0]
pos = my.position
my.position.x = pos.x + 1

482 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 22:09:56 ]
初心者スレでStruct使うアホは即爆発していいよ



483 名前:478 mailto:sage [2009/12/28(月) 22:11:56 ]
そんな難しい文法使わないでください。
初心者には理解できません。

484 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 22:15:23 ]
>>482
お前は永遠に配列の添字アクセスでもやってろ






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<233KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef