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


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

Ruby 初心者スレッド Part 22



1 名前:730 [2008/09/15(月) 17:25:21 ]
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

   【Ruby1.9 は不安定な開発版であり初心者には全く向きません】
   【最新安定版の Ruby1.8.7 の使用をお勧めします】
    ※1.8.7 は1.8 と 1.9 の橋渡しをするためのリリースです。
      1.9 の新機能の一部が利用可能なので初学者にお勧めです。
    ※ただし十分安定しているとは言えないので
      プロダクション環境での利用にはお勧めしません。

関連スレやURLは>>2-8あたりを見てください。Ruby on Railsの質問は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を読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。

541 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 18:32:47 ]
なんかa_idって名前が気になるな
すっげー憶測だけど、Bはインスタンス変数でAを持つのが素直な設計だったりしない?
それならB#save!で@a.save!するだけで済むから楽なんだけど

542 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 18:38:16 ]
>>538
おまえ、ほんとエスパーだな。
おれはさっぱり読み解けなかった。

543 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 19:03:44 ]
>>534
railsというかActiveSupportはそういう関連づけを自動化してくれなかったっけ?

あるいは>>541のようにしてB#a_idは@a.idを返すようにするとか。

544 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 20:48:21 ]
>540は自分の頭にあるオブジェクトのイメージをER図やクラス図で
さらっと描きだせるくらいのレベルになるまでARを封印すべきだ。
もし仕事でやってるなら合掌。


545 名前:デフォルトの名無しさん [2008/10/12(日) 21:00:36 ]
>>541, 543
確かにModelはそんな感じの設計です。
@a.b = @b
で関連付けて、
@a.save!
とすればbも入るってことですよね。

ただ、viewに2つのmodelを分けて書くのが面倒だったので、調べているとActivePresenterなるpluginを発見し
(ttp://jamesgolick.com/2008/7/28/introducing-activepresenter-the-presenter-library-you-already-know)
利用してみたところ、さきほどの参照のようなことをしたいなと思った次第です。

このpluginは2つのModelを結合してくれるもので、
 @ab = AB.new(params[:ab])
 @ab.save
で、AもBもsaveできちゃうよということでした。
ただ、DBの保存時に決定される@ab.a_idと@ab.b_a_idが関連づかずに困っていたというわけです。
あまり、plugin自体には手を入れてくなかったので、
@ab.a_idと@ab.b_a_idが同じだよということができれば良いなということでした。

546 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 23:11:18 ]
プライマリキーの値を変更するな、テーブルの設計からやり直せ

547 名前:デフォルトの名無しさん [2008/10/12(日) 23:24:26 ]
>>545
自己レスです
とりあえず、参照は素直にはできないということは分かりました。
ありがとうございました。
もう少し試行錯誤して、無理なら普通のARにしてみます。

548 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 01:37:23 ]
>>544
初心者として気になるんだけど
そのレベルになるまではどんな感じやるのが上達する?

549 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 01:44:19 ]
>>548
1週間に3日書く
今週はRubyスクリプト書いたり改良の試行錯誤が無かったなあという週が無いという状態にする

制御構造覚えたらマニュアル見つつたまに使う程度のカジュアルさでももちろん一向に構わないが、
その場合はRubyが上達することはないだろうし、上達するほど頑張る理由もそもそも無いことだろう



550 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 01:56:31 ]
Rubyのクラス分けやモジュール分けはてきとーで良いということがわかった頃から
スクリプト作るの早くなったような気がする

今でも特異メソッドとかわからんが
インスタンスメソッドとクラスメソッドしか作ってない
Proc はライブラリで要求されないと作らない
yield は使う機会が無いのでわけがわからない

551 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 06:21:15 ]
yield は each 作ったりしたらすぐ覚える

552 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 06:31:29 ]
おれはテストを書く気が全く起こらないんだよなあ…
少しづつでも書けばいいんだろうけど
つまらないから全く続かない…

553 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 07:56:06 ]
どう考えても

 テストを書くのに悩む時間 >> 変なバグで悩む時間

なのでテストを書く理由がない俺
他人様に提供するライブラリ書くんじゃない限り要らないもんだと割り切ってる
書き方指南がないということは本当はみんな不要だと思ってる証拠

554 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 08:32:04 ]
>>553
書き方指南いろいろあるじゃん
本にもwebページにも

俺も有用であるという自信はないが

555 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 08:43:49 ]
テスト書くためのスクリプトでテスト書く説明するだけだしなあ
お前そんなスクリプトなんて普段絶対書かないだろ、というのが多々…(特にテスト駆動)

556 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 08:54:11 ]
スクリプト序盤から中盤での書き方がよくわからないのがテスト駆動の特徴
というかMockとかあのへんを理解しないと関数的スクリプトのテストしかできん

557 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 09:23:47 ]
色々書き方の作法もあるけど、むしろ形式に捕らわれず自由にテスト書くようにしたら
それはそれで楽める部分もあると思う。

558 名前:デフォルトの名無しさん [2008/10/13(月) 09:42:39 ]
俺はテスト書かなくて困るのってリリース後なんだよなぁ。
デグレ出るたびに書いときゃよかったって思う。

559 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 10:07:10 ]
ちゃんとテストが書けるようになったら、もう上級者だよ。
つまり上級者になるためには、テストがきちんと書けるようにならないといけない。

おれはまだうまく書けないんだけどな。
UIのテストなんか、どうしたらいいのかさっぱりだ。



560 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 10:36:29 ]
他人様のライブラリのgitのtestディレクトリとか眺めてるとよくわかる

本文コードの追加変更に対してテストが異常に適当というか不足
時間かけてまでして作りたくないかどうすれば網羅するか考えるの面倒なんだろうな

561 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 14:01:54 ]
テストなしでロジック修正とかコードの整理(リファクタリング)とか、
怖くてできない体になった。


562 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 15:01:22 ]
ZenTest試用中。なかなか良さげ。
ttp://mono.kmc.gr.jp/~yhara/w/?ZenTestMemo
ttp://zentest.rubyforge.org/ZenTest/files/README_txt.html

gem install ZenTest
でインストール。

563 名前:デフォルトの名無しさん [2008/10/13(月) 17:14:28 ]
>>561
わかります

564 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 17:30:17 ]
テスト書くとメソッド単位でしか検証できないからめんどくさい
あと、GUIアプリのTestってどうやるの?

565 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 17:35:59 ]
できない

566 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 17:55:46 ]
入力の自動化をすれば出来る。
が、チェック項目をリストにして人力でやったほうがなんぼかマシ。

567 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 18:30:55 ]
RubyでGUIつーと、テスト以前に環境が貧弱だからのう。
WebならSeleniumとか。


568 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 18:32:59 ]
>>564
自動でマウス動かしてクリックしたりフォーム埋めたりするよプログラムを併用する
稀にどうしても自動化できないところが出てくることがあり、そういうときは漏れのない操作一覧図を書いて手動

569 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 18:58:10 ]
>>564
ビューとコントローラを極力分離すれば、ある程度までは機械的にテストできる



570 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 19:02:19 ]
GUI自体をテストしたい場合は?

571 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 19:15:36 ]
GUI自体のテストって具体的にどんなの?

572 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 19:52:47 ]
マウスクリックのタイミングとか

573 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 02:10:57 ]
サブネットマスクにマッチするような判定って簡単に出来ますか?
例えば、
"192.168.0.45".in_mask?("192.168.0.0/24") # => true
"192.168.0.45".in_mask?("192.168.0.0/29") # => false
となってほしいのです。

574 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 02:15:25 ]
本質的にサブネットマスクはbitmaskだから
ANDしてやればいい

575 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 03:03:18 ]
>>573
IPAddr#include?


576 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 07:48:35 ]
rubyはじめたばかりのものです。

Windowsにて、ワンクリックインストーラでrubyをインストールし、
RMagick(とImageMagick)をインストールしました。
サンプルプログラムを走らせようとすると(ruby sample.rb)、以下のようなエラーメッセージが出ました。

./RMagick.rb:2: uninitialized constant Magick (NameError)
from D:/Programs/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:
27:in `gem_original_require'
from D:/Programs/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:
27:in `require'
from rmagick.rb:1

ファイルの内容は以下です。

require 'RMagick'
include Magick
img1 = ImageList.new("d:/a.bmp")
img2 = img1.blur_image(0,2)
img2.write("sample01.bmp")
exit

色々と試した結果、上記ファイルがあるディレクトリ(D:\rubyとする)をカレントディレクトリとして、
cmd.exeからruby sample.rbとすると上記のエラーが発生しますが、カレントディレクトリがd:\の
場合は正常に実行されました。どうもカレントディレクトリに*.rbなファイルがあると失敗するようです。
irbでも同様の結果でした。

これを回避する方法はないものでしょうか?

577 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 09:35:18 ]
そろそろ解決してる頃だろうか

>>576
require 'hoge' は カレントディレクトリの hoge.rb ファイルを読み込む
rmagick.rb (大文字小文字問わず)という自作ファイルを改名しろ

「hoge ライブラリを試そうとして hoge.rb を作って実行し、次にまた別のスクリプトを作って変なエラーにはまる」というのは
そろそろ FAQ にしてもいいと思う

578 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 09:46:44 ]
>>577
ああ、まさにそれでした。
5時間くらい悩んでの書き込みだったので、今はRMagickのマニュアルを読んでました。
有難うございました。

579 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 20:24:43 ]
文字列中のすべての"\"を"\\"に、"'"を"\'"に置きかえたいときに
gsubってものすごくつかいづらいんですけど、
なんか他にいい方法はありませんか?




580 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 21:00:31 ]
str.gsub(/['\\]/){|s|"\\#{s}"}
十分簡潔に思うが、どの辺が使いづらく感じた?

581 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 21:19:06 ]
str.gsub(/['"]/) { %Q|¥¥#{$&}| }
あたりで手を打たないか?


582 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 21:19:40 ]
遅すぎたリロード


583 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 21:42:38 ]
ブロック使わずに表現できないの?

584 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 21:45:41 ]
str.gsub(/([\\'])/, "\\\\\\1")

・・・うん、ブロックのほうがいい。

>>579-580
後方参照使わずにgsub繰り返すっていう力押しをしてた人が
ハマるパターンだろうね。

585 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 22:04:09 ]
>>580
なるほど、ブロックを使えばいいんですね。

>十分簡潔に思うが、どの辺が使いづらく感じた?
perl なら、 s/([\\'])/\\\1/; と、比較的直感的なところを
>>584 のように"\\\\\\1"と書くとバックスラッシュが多くなりすぎて
後で読みにくいと思ったわけです。


586 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 22:06:36 ]
おっと、 s/([\\'])/\\\1/g; でした。

587 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 23:56:30 ]
str.gsub(/[\\']/, /\\\&/.source)


588 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 00:44:09 ]
Windows限定でいいんですけど、OSが32ビット版か64ビット版か調べる方法はあるでしょうか。
ENV["OS"]だと32bit版XPでも64bit版XPでも"Windows_NT"と表示されて区別が付きません。



589 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 00:51:21 ]
Ruby関係ねえええ

ENV['PROCESSOR_ARCHITECTURE'].include?('64') が true なら 64BitなCPUなのできっと 64Bit版Windows
ttp://support.microsoft.com/kb/827218/



590 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 01:06:42 ]
じゃあruby関係で
ruby -e 'p RUBY_PLATFORM'

64bit環境を持ってないのでどんな出力がされるのかは知らんけど

591 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 01:10:11 ]
RUBY_PLATFORMはコンパイル時に決まりそう

592 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 01:15:50 ]
Fixnumを地道にカウントアップしていってBignumになる境界を見つける -> そこから推定
とかそういうアホを思いついた

593 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 01:21:56 ]
64bitのOSで32bitのバイナリ使ってたら無理じゃないか

594 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 02:22:11 ]
WIN32 API の GetSystemInfo() とか呼んだら良さそうな気がする。
呼び方はあれ、dl 使うなり何なり工夫してくれと。

595 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 03:01:15 ]
Ruby の Web アプリケーションによくでてくる、

class CGI
def valid?( param, idx = 0 )
self.params[param] and self.params[param][idx] and self.params[param][idx].length > 0
end
end

というコードの著作権者、またはライセンスってわかりますか?
GPL だとしてもソースを配布する際には著作権表示が必要ですよね。

tDiary や hiki にも登場していますが、特別そういう表示がないので
勝手に使っても差し支えないんでしょうか?

596 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 03:12:41 ]
その程度の誰が書いても同じになるコードには
著作権が発生するほどの創作性はないよ。

597 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 06:11:16 ]
適当に書き換えればおk

if self.params[param]
if self.params[param][idx]
if not self.params[param][idx].size.zero?
return true
end
end
end
return false


598 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 06:42:47 ]
>>588
64bit の Windows で試していないから動いたらラッキーぐらいで

require 'Win32API'

GetCurrentProcess = Win32API.new('kernel32', 'GetCurrentProcess', 'v', 'i')
hProcess = GetCurrentProcess.call()
isWow64Process = "\0" * 4
is64BitWindows = false
begin
 IsWow64Process = Win32API.new('Kernel32', 'IsWow64Process', ['p', 'p'], 'i')
 IsWow64Process.call(hProcess, isWow64Process)
 is64bitOS = true unless isWow64Process == "\0" * 4
rescue RuntimeError
end
p is64BitWindows

599 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 07:08:01 ]
CamelCaseキモすぎる



600 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 08:10:27 ]
PascalCaseだね

601 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 08:20:52 ]
LCCだろ

さりとて、Windows の API にはハイフン区切りは似合わないのも事実

602 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 08:25:44 ]
CamelCaseは力強さを感じる

603 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 12:36:20 ]
MSは先頭大文字のCamelCase好きだよね
クラス名でもないのに何故?と違和感を感じる

604 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 14:33:09 ]
クラス名は許せるが、rubyでは_区切りとisPredicateではなくpredicate?を使ってほしい

605 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 15:06:15 ]
>>604
>isPredicateではなくpredicate?
変数に?使えたっけ

606 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 15:17:48 ]
使えないよ。
けどpredicateってことは多分604はメソッド名のつもりで言ったんだと思う

607 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 17:14:47 ]
何気に
attr_reader :hoge?
って書けないんだよな

608 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 20:37:53 ]
@hoge? がだめだからなぁ。
Module#attr_readerが再定義されていればその限りじゃないぜ
意義はないけど。

609 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 20:39:11 ]
?付きメソッドを定義したくなるのはよくあることなのに、attrで定義できないのがな・・・
自分でattr_readerを拡張するか、rubyplusのboolattr使うと便利
つーかActiveSupport辺りにも入ってそうな気がする



610 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 21:32:47 ]
?付きメソッドを自分で定義すれば済むだけなので、漏れは必要ないかなあ。

611 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 21:48:34 ]
>>610
メソッドごとに一つ一つ?付きを定義していくのって凄く面倒じゃね? 変更に弱くなるし

612 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 21:59:26 ]
?末尾のシンボルを渡されたら、メソッド名はそのままに
末尾削った変数にアクセスするっていうのも便利かもしらんね

でも真偽値のアクセサが面倒になるほど多いっていうのも
設計見直せる可能性はない?

613 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 22:29:30 ]
class Hoge
 def self.def_predicate(name)
  attr_accessor name
  private name
  private "#{name}="
  define_method("#{name}?"){ __send__(name) }
  public "#{name}?"
 end

 def_predicate :hoge
end

こんなんとか。リフレクションを用いるほど多く使うんじゃなければ
ちゃんと書いたほうがいいと思うけど

614 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 22:40:14 ]
>>611
>>612の言うように?付きメソッドをそんなに定義することあるかな?

615 名前:611 mailto:sage [2008/10/15(水) 22:43:31 ]
>>612 >>614
4〜5つ程度の?付きメソッドでも、似たような定義を続けて書くことになるからかなり面倒だと俺は思う
この辺は個人の意見もあるとは思うが

616 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 22:51:08 ]
attr はあまり使わない
メソッドはきちんと定義する

617 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 23:34:27 ]
そもそも @hoge? ができないことに疑問を感じるんだが

618 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 23:45:48 ]
だから ? つきはメソッドだっつーの述語だっつーの

data= っていう変数が作れないのは不自然か?
change! っていう変数が作れないのは不自然か?

619 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 23:56:18 ]
@is_foo みたいな変数名をどれだけ見かけることか
変数名が述語になれないのはおかしい



620 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:08:25 ]
@hoge? = 123
まず見た目がきもい
そして三項演算子の文法と衝突しそう

621 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:08:33 ]
変数名が述語になるほうがおかしい飢餓す

622 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:12:41 ]
@foop か @foo_p でいい

623 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:14:27 ]
「○○が二者択一のどちらかか、を格納する変数」というのはあまり Ruby っぽくない
二者択一の判断自体をメソッドで参照するのがフツーな気がする

624 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:32:23 ]
>>620
そんなこと言ったらメソッド foo? がどんなオブジェクトも返すことのできる点もおかしくないかい?

625 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:36:58 ]
見た目がきもい、ってのはほんとに見たまんま、?で終わる識別子が左辺値にくるのが
きもいってことだよ。
別に @hoge? = true ならいいってことじゃない

626 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:41:29 ]
>>621
変数名とメソッド名の間で、言葉づかいの上でのセマンティックスが違っている「べき」なら、attr 系は廃止すべきってことになるな

>>625
@hoge? = true なら悪くないと思うけど

627 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:46:06 ]
やだよ。
メソッド名の慣習のせいで、「hogeっすか?」って訊いてるようなイメージがあるじゃん。>@hoge?
で、「そうっすよ」とか「違いますよ」とか返事しようとしてるところに値突っ込むってのは変な感じだ。観念的な言い方でアレだが

628 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:50:34 ]
何も @hoge? があってもそう書かなきゃいけないわけじゃないから、? を使わない自由を奪っているわけではないでしょ。
それよりも、attr 系によって変数名とメソッド名を関連付ける機能が提供されているにもかかわらず、? 付のメソッドだけ特例でそれができないほうが一貫性に欠けて嫌だ。

629 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:54:28 ]
>変数名とメソッド名を関連付ける機能
単なるメソッド。とあるリフレクションのラップなだけ。

>? 付のメソッドだけ特例でそれができない
できないのはそこじゃなくて変数名に?を付けること。
でもってこっちは処理系本体の機能の話。

パーサとかに手を入れて?付き変数を許してまで@hoge?とか書きたいか?



630 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:58:26 ]
そりゃ現状じゃ @hoge? が書けないようにパースしてるんだから、パーサを変えるしかないわな。
別に難しいことじゃない。
あと、attr_reader が処理系そのものが提供しているかどうかなんて関係ないじゃん。飽くまで意味論の話だし、built-inで入ってるんだから。

631 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 01:02:56 ]
だって…再定義できるもの

632 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 01:06:57 ]
>>627
メソッドvalueと変数@valueがあったとして、メソッドのほうは「valueは何か?」と問う意味なのに対して@valueはそのままの意味だよね?
同じようにhoge?がメッセージだと解釈されても、@hoge?までメッセージと解釈する必要はないのでは?

633 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 01:20:26 ]
変数名だからその通りなんだけど、あくまでイメージというか馴れや先入観の問題だよ。>@hoge?がメッセージっぽい

また別の問題として、
変数名に?が付けられて、attr系もそんな名前を受け取るとすると
hoge.foo? = true とか
hoge.bar! = false とかが出て来る。後者なんて比較の否定と見間違う。

さらにいうと、?や!を許すとして、[]とか[]=とか@-は変数名に許す? 全部メソッド名としては有効なはずだよ。
attr_accessor :foo=
-> foo.foo= = 123
こんなことになる

634 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 01:44:47 ]
hoge.foo? = true はできてもいいと思う。
hoge.foo! = ってのはまあちょっとヘンだけど、attr系で ! つけたかったことないから、あってもなくてもいいや。
[] や = が「メソッドの一部である」というのは別の側面で筋を通すための論法であって必ずしも名前の一部ではないので
(その証拠にメソッド「foo=」は、「foo.foo = 」のようにスペースを入れることができる)、
attr_accessor :foo= 等はなくてもよいかと。

635 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 01:55:24 ]
>その証拠にメソッド「foo=」は、「foo.foo = 」のようにスペースを入れることができる
いやいや、メソッド名はあくまで「foo=」だよ。__send__(:foo=, 123)とか出来る。
パーサが頑張って「foo.foo = value」を「foo.foo=(value)」と同じような扱いにしてくれているだけで。

636 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 06:05:11 ]
隔離スレでやれ

637 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 09:41:53 ]
本スレが隔離スレってのも難儀な話だよなあ

638 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 07:15:54 ]
RDEのツールバーとコンソール窓の設定などが上手く動作してくれません
ツールバーを移動して1段にまとめたりしても、RDEを最起動すると別の位置へ
勝手に移動した状態になってしまいます
コンソール窓は、フォントの設定が初期値に戻ってしまうのと、
ctrl+alt+cで開閉したりができません

コンソール窓のフォント設定だけは致命的なんで、そこだけでもなんとかできればと

639 名前:638 mailto:sage [2008/10/21(火) 07:27:47 ]
一応環境も
ActiveScriptRuby 1.8.7(p72)
Windows XP SP3
です



640 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 14:20:14 ]
ツールバーの問題は俺の環境(XP)では何年も前からあるよ。

641 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 15:51:59 ]
てかRDE薦めてるサイトでもあるのか?
俺なら間違ってもRDEなんて使わせないんだが






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

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

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