トップページ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を読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
0412デフォルトの名無しさん2010/12/31(金) 03:24:08
( ゚д゚)
04134092010/12/31(金) 03:43:28
すいません、かなり誤解されるような言い方でした。

>同じクラスの異なるオブジェクトで共有することすら出来ないので

これは、インスタンスメソッドの中からクラスメソッドを呼べば、一応共有出来ますね。

class A
@a = 1
def self.read
@a
end
def read
self.class.read
end
end

a = new.A
a.read

でもこんなのは美しくないと思います。

class B
@@b
def read
@@b
end
end

b = B.new
b.read

やはりこちらが自然だと思います。
0414デフォルトの名無しさん2010/12/31(金) 06:19:36
@@って使ったこと無いけどいつ使うと美味しいの?
0415デフォルトの名無しさん2010/12/31(金) 07:46:52
>>414
>>410
0416デフォルトの名無しさん2010/12/31(金) 08:04:49
>>413
悪いけど、何を言いたいのかよく分かりません。
Javaが得意だというなら、やりたい事をJavaのコードで書いてみて。
0417デフォルトの名無しさん2010/12/31(金) 08:48:34
彼にとってクラスとは「名前空間をきれいに整理する存在」程度のものなのだと思う
実は昔のBasicとかCOBOLあたりの経験があるんじゃないだろうか
Javaというキーワードが出てはいるが、
オブジェクト指向という言葉からはかなり遠いコードを書いているように思う
0418デフォルトの名無しさん2010/12/31(金) 10:16:53
> クラスとは「名前空間をきれいに整理する存在」程度のもの

実際そうじゃん^^
0419デフォルトの名無しさん2010/12/31(金) 10:19:05
>>413
まず「1つのクラスからはいくつもオブジェクトを生成できる」ということは解る?
組み込みのクラスで言えば、数値クラスとか文字列クラスとか、作れるオブジェクトが1つじゃ絶対困るよね。
そして、1つのクラス(仮にMyClassとしよう)から生成したオブジェクトがa,b,cと3つあるとする。

その際、a,b,cの間で異なる値を持つのがインスタンス変数。
逆に、クラス自体に値を持たせたい、同じクラスから生成したオブジェクト同士で共有させたい
という時に使うのがクラス変数。

たぶんこの使い分け自体はJavaでも同じだと思うから
使い慣れてるJavaで、もう一度OOPを勉強し直すと良いよ。
0420デフォルトの名無しさん2010/12/31(金) 10:25:22
JavaのOOは異端
0421デフォルトの名無しさん2010/12/31(金) 10:59:58
> 実際そうじゃん^^

馬鹿確定
0422デフォルトの名無しさん2010/12/31(金) 11:03:23
クラスインスタンス変数とクラス変数の違いを聞いているのになぜ
インスタンス変数とクラス変数の違いを答えるのか
0423デフォルトの名無しさん2010/12/31(金) 11:38:22
>>409の認識は正しい
>>411>>413は言いたいことが分からない
>>411>>419はクラスインスタンス変数を理解していないか存在自体知らないみたいなので虫でおk
0424デフォルトの名無しさん2010/12/31(金) 11:40:01
アンカー間違えた
>>409の認識は正しい
>>411>>413は言いたいことが分からない
>>410>>419はクラスインスタンス変数を理解していないか存在自体知らないみたいなので虫でおk
0425デフォルトの名無しさん2010/12/31(金) 11:48:21
>>422
すまん、本気で読み間違えたwww
0426デフォルトの名無しさん2010/12/31(金) 14:30:37
クラスインスタンス変数がインスタンス変数と何の違いも無く、ただのインスタンス変数であることを理解してない奴が多そうだ。
>>413の言うことは結構最もなことで、他言語の実装を理解してる人が初めて見れば相当キモイ。
変数宣言の要らない(できない)Rubyではクラス変数を実装するのが難しいからクラスインスタンス変数で誤魔化すしかない。

クラスも所詮ただのオブジェクトなので、クラスインスタンス変数を持った所で他のオブジェクトに影響を与えることは無い。
同じクラスオブジェクトに対するアクセサを各インスタンスが持っているだけ。

なので>>413に対する回答としては、
クラスインスタンス変数は確かに誤魔化しの機能だが、Rubyではそれしか方法が無いので仕方ない。
0427デフォルトの名無しさん2010/12/31(金) 18:21:44
クラスインスタンス変数の存在意義が分からないという>>409
以下の実行結果に問題を感じないのか?

class Animal
attr_accessor :species

@@count_of_species = 0

def self.count_of_species
@@count_of_species
end

def initialize(species)
@@count_of_species += 1
@species = species
end
end

class Dog < Animal
end

class Cat < Animal
end

dog = Dog.new('shibainu')
cat = Cat.new('mikeneko')

puts Animal.count_of_species
puts Dog.count_of_species
puts Cat.count_of_species
0428デフォルトの名無しさん2010/12/31(金) 18:56:21
>>427
1.9で直ったぞそれ
0429デフォルトの名無しさん2010/12/31(金) 19:19:53
>>428
検討中なんじゃなくて?おれの環境は1.9.2p0だよ
0430デフォルトの名無しさん2010/12/31(金) 23:45:35
>>407
該当コミットくれ
0431デフォルトの名無しさん2010/12/31(金) 23:58:54
>>407
それは助かるわ。1.9に移行する利用がまたひとつ増えた

コマンドプロンプトで 1.9.2-p0 mingw32
irb -U起動後、日本語含むファイル名があるディレクトリで
puts Dir["*"]で文字化けする

あれ?何が悪い?
0432デフォルトの名無しさん2011/01/01(土) 03:02:52
LANGが悪いんじゃね
0433sage2011/01/01(土) 03:46:43
>>407
だめだった・・・

# -*- encoding: utf-8 -*-
puts "尾骶骨"

ruby 1.9.2p136 (2010-12-25) [i386-mingw32]

win32_utf-8_failed.rb:2:in `write': U+9AB6 from UTF-8 to Windows-31J (Encoding::
UndefinedConversionError)
from win32_utf-8_failed.rb:2:in `puts'
from win32_utf-8_failed.rb:2:in `puts'
from win32_utf-8_failed.rb:2:in `<main>'
0434デフォルトの名無しさん2011/01/01(土) 21:54:32
case
when n < 0
when n < 10
when n < 50
when n < 100
else
end

というようなことをやりたいときにもっといい書き方がありそうな気がするんだけどまったくたどり着けない
誰か知らない?
0435デフォルトの名無しさん2011/01/01(土) 22:08:59
1.9系では Proc#=== が call のaliasなので(1.8系でも自分でalias1行書けば可能)

lesser_than = lambda {|a| lambda {|b| b < a } }

{ 'Taro' => 90, 'Jiro' => 50, 'Saburo' => 30 }.each do |name, score|
rank =
case score
when lesser_than[40]; "D"
when lesser_than[60]; "C"
when lesser_than[80]; "B"
else "A"
end
puts "%s:%d:%s" % [ name, score, rank ]
end

Taro:90:A
Jiro:50:C
Saburo:30:D

なんていう方法があるけど…いいと言えるかどうかは迷うところ。

0436デフォルトの名無しさん2011/01/01(土) 22:29:01
>>435
Procを使うのは思いつかなかった
caseに式がついてるほうが好みだからこれはありがたい
0437デフォルトの名無しさん2011/01/01(土) 23:27:25
lesser・・
0438デフォルトの名無しさん2011/01/02(日) 00:31:25
less than か。
0439デフォルトの名無しさん2011/01/02(日) 00:54:03
  (⌒)_(⌒)
  / ,  、ヽ
 ({{ o⌒o}})
  彡<_●_>ミ
  /   ヽ
  ||  ||
  U  U
  ノ| /ヽ|
 (_ノU U
0440デフォルトの名無しさん2011/01/02(日) 01:26:18
新年早々わらかすな
0441デフォルトの名無しさん2011/01/02(日) 07:40:52
サー・イレッサー!
0442デフォルトの名無しさん2011/01/02(日) 10:05:15
>>431
irb は -U オプションで default_external まで UTF-8 になるせいかな。
-Ecp932:utf-8 とかならいけるかも。
0443デフォルトの名無しさん2011/01/02(日) 13:32:03
MLって初心者でも参加して逐一見たほうがいいですか?
0444デフォルトの名無しさん2011/01/02(日) 13:37:38
仕事でRubyを使ってる人(要はそれで飯を食ってる人)は読んどいた方が良いかなぁと思うけど、
趣味でRubyを使ってる人や、仕事で自分のツールとしてRubyを使っている人はログを検索するだけで十分だと思う。
0445デフォルトの名無しさん2011/01/02(日) 18:42:15
東大生の俺はRubyのMLなんてレベル低すぎて読みたくない
0446デフォルトの名無しさん2011/01/02(日) 20:00:42
じゃあ発信する側に回れば
0447デフォルトの名無しさん2011/01/03(月) 00:23:25
クラスインスタンス変数って知らなかったのでググってみたのですが

1. インスタンスメソッド定義内に書かれた @foo はインスタンス変数
2. インスタンスメソッド定義外のクラス定義内に書かれた @foo はクラスインスタンス変数
3. クラス定義内に書かれた @@foo という表記は常にクラス変数

別の言い方をすると

A. def f ... end 内では self はクラスKのインスタンス
B. class K ... end 内では self はクラスK(ClassクラスのインスタンスK)
C. def self.f ... end 内では self はクラスK(これはBに吸収すべきか)
で常に @foo は self のインスタンス変数で @@foo は self のクラス変数

というかんじの理解でよいの?

それから 1.9 からクラス変数は継承しないという仕様になったそうですが、そうなると
クラスインスタンス変数しか存在しなくなった(従来のサブクラスに継承されるクラス変数
はサポートされない)、ということ?
0448デフォルトの名無しさん2011/01/03(月) 04:09:14
>>411
>クラスインスタンス変数の場合、
>同じクラスの異なるオブジェクトで共有することすら出来ないので
>使い道があるのかさえ分かりません。
>

そうかなあ。
・子クラスでも共有したい場合はクラス変数を使う
・子クラスとは共有したくない場合はクラスインスタンス変数を使う
でいいじゃん。

class Model
 def self.table_name; @table_name; end
end

class Person < Model
 @table_name = 'people' # 親クラスのデータは 'people'
end

class Student < Person
 @table_name = 'students' # 子クラスのデータは 'students'
end

p Student.table_name #=> "students"

もしクラスインスタンス変数ではなくクラス変数を使ったら、PersonとStudentが同じテーブル名になってしまう。
0449デフォルトの名無しさん2011/01/03(月) 07:31:07
共有は悪、というのが俺のジャスティス。
クラス変数もクラスインスタンス変数も断じて使わん!
0450デフォルトの名無しさん2011/01/03(月) 08:40:03
rubyのプログラム中に他の言語を動かすことって出来るの?
0451デフォルトの名無しさん2011/01/03(月) 09:38:26
コードの一部を直接別文法で書きたいのか、
ライブラリを使えればいいのか、
外部プログラムとして実行できればいいのか。
0452デフォルトの名無しさん2011/01/03(月) 13:07:08
class BBSReader
  attr_accessor :uses_proxy
# (ry
end

BBSReader.new.tap{|bbs| bbs.uses_proxy = true; p bbs.uses_proxy }

# boolな値の属性の名前を付けるときのruby風プラクティスを教えてください
# こういうときはどう名前つけるものなのでしょうか
#
# bbs.uses_proxy = trueだと、(proxyを使うという意図の)bbs.use_proxyと混同しないのか?とか
#
# boolを返すときはbbs.uses_proxy?のだとわかりやすいですが、
# attr_accessor, mattr_accessorのようなものを使う場合そこまでやってくれとはいえ
# uses_proxy?にaliasするのもなんだかな、と思っています
0453デフォルトの名無しさん2011/01/03(月) 13:09:27
一行要約: Railsっぽいbool変数、属性の命名方法教えてください
0454デフォルトの名無しさん2011/01/03(月) 16:27:55
ruby的には動詞変化はなし
BBSReader.new.tap{|bbs| bbs.use_proxy = true; p bbs.use_proxy }

rails的
BBSReader.new(:use_proxy => true).tap{|bbs| p bbs.use_proxy }
0455デフォルトの名無しさん2011/01/03(月) 17:03:32
Rubyでboolったら「?」だろうがよ

># boolを返すときはbbs.uses_proxy?のだとわかりやすいですが、
># attr_accessor, mattr_accessorのようなものを使う場合そこまでやってくれとはいえ
># uses_proxy?にaliasするのもなんだかな、と思っています
def use_proxy?
@use_proxy
end
でattrいらない。
0456デフォルトの名無しさん2011/01/03(月) 17:13:30
俺の会社では
「クラス変数は使用禁止」
だぞ。

理由は簡単で、クラス変数を利用しなければ不可能であるような実装はあり得ないからだ。
0457デフォルトの名無しさん2011/01/03(月) 17:21:52
あんまり了解性のある理由になってないな…w
じゃぁクラスも使用禁止だぞ。理由は簡単で(ry
0458デフォルトの名無しさん2011/01/03(月) 17:24:29
じゃあRuby使用禁止な。理由(ry
0459デフォルトの名無しさん2011/01/03(月) 17:25:34
Rubyのクラス変数は継承したクラスでもスコープが共有されるんで使いづらい
0460デフォルトの名無しさん2011/01/03(月) 17:26:27
「クラス変数を利用しなければ不可能であるような実装」は無いだろうけど「クラス変数を利用しなければ余計な手間がかかる実装」はあるんだけどなぁ…
各所に余計な手間をばら撒いてまでクラス変数を禁止するメリットはないよね
0461デフォルトの名無しさん2011/01/03(月) 17:27:34
>>459
初心者だから言ってみるんだけどさ、
スコープ共有としても、
触らなければ関係ないんじゃ?
0462デフォルトの名無しさん2011/01/03(月) 17:42:14
継承して使わせるようなクラスの場合、クラス変数は使わないほうが無難な気がしますわ。
0463デフォルトの名無しさん2011/01/03(月) 18:09:17
クラス変数の理想としては、
継承はされるがスコープは共有しない。

しかしRubyでは
@継承してスコープまで共有する
A継承すらしない
のどちらかの方法でしか実装できない。

っていう認識で合ってるのかな?
このジレンマの末、1.8では@を取り、1.9ではAを取る選択をしたということ?
なぜか1.9でも継承されてるみたいだけど。
0464デフォルトの名無しさん2011/01/03(月) 23:51:10
>>454
ありがとう
uses_proxyじゃなくてuse_proxyですか

Rails…w

>>455
setterというかattr_writerなしな前提でしょうか?
Rubyでboolだと

class BBSReader
  def use_proxy=(value)
    @use_proxy = value
  end

  def use_proxy?
    @use_proxy
  end
# (ry
end

とするのかなと思ってまして、attr_accessorなどを使って楽すると

class BBSReader
  attr_accessor :use_proxy
  alias :use_proxy? :use_proxy
# (ry
end

とするものかなと >>452でいいたくて
04654552011/01/04(火) 00:34:03
>>464
ごめん。
実は俺自身も初心者に産毛が生えた程度だからあまり偉そうに言えなかったりする。
でもRubyらしくってことならやっぱりboolはクエスチョンマークの付いたメソッドで得るものだと思う。
んで、セッタのメソッドを作るんじゃなくて、
def use_proxy
 @use_proxy = true
end
def unuse_proxy
 @use_proxy = false
end
みたいにする。
変数とメソッドの名前を今までの話を引き継いだものにしたから、このままじゃちょっと違和感あるけど。
attr_は極力使わないほうがいいはず。
0466デフォルトの名無しさん2011/01/04(火) 08:57:38
どうでもいいかもしれないけど、proxy_used?のほうが好きかな
0467デフォルトの名無しさん2011/01/04(火) 12:39:49
こちらでいいか分かりませんが、教えてください。

1.9から、sprintfフォーマットで、
'%{a},%<a>4s' % {a: 'b'} # => "b, b"
のようなことが出来るようになったみたいですが、ドキュメントに記載が無いようです。
これは、単なるドキュメントの記載漏れなのでしょうか?
それとも、まだ仕様が確定していなくて、使わない方がいい状況とかいうことなのでしょうか?

ちなみに、MLの議論は以下で行われたっぽいです。
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/35851
0468デフォルトの名無しさん2011/01/04(火) 12:45:44
>>467
sprintf.c のrdocコメントに記載がある。
0469デフォルトの名無しさん2011/01/04(火) 13:09:35
>>468
すばやいレスありがとう!
確かにありますね。
これで、心置きなく使えます。
0470デフォルトの名無しさん2011/01/04(火) 16:57:57
attr_* は初心者的実効性に疑問符がついてると思う
何が悲しくて内部変数名と同名のメソッドを定義強制されなければならんのかと小一時間

確かにラクなのだが、他人様の前に出すようなクラスなのなら
使用する前にちょっと考えてみたほうがいいかも
0471デフォルトの名無しさん2011/01/04(火) 17:16:50
話が逆だろ?

インスタンス変数と、読み書き以外何もしないセッタ・ゲッタを、ひととおり定義したい、
という時に、DRY的な理由から使うのがattr_*だと思う。初心者だろうが熟練者だろうが。

他人様の前に出すようなクラスなら、より抽象的にわかりやすくなるのだから、
積極的に使うべき。
0472デフォルトの名無しさん2011/01/04(火) 17:18:36
attr_*を使わずどうするのか書いてないから何とも言えないな
>>470は具体的にどうすればいいと思ってるんだよ
0473デフォルトの名無しさん2011/01/04(火) 17:31:52
>>471
本当にattr_を使わなければならないのかどうか考えろってことだろ
DRYもいいがカプセル化も重要

>>472
俺470じゃないけど>>465みたいなのじゃないかな?
少なくともインスタンス変数を外から直接操作できるなんて可能な限り避けるべき
0474デフォルトの名無しさん2011/01/04(火) 18:01:13
悲しいならattr_*を使わなければいいだけの話だろ
自分で勝手に宣言しておいて「強制」とか訳わからん
0475デフォルトの名無しさん2011/01/04(火) 18:06:50
attr_*を使うべきじゃないってのは
>インスタンス変数と、読み書き以外何もしないセッタ・ゲッタを、ひととおり定義したい、
というのがそもそもよくないと言っているのか
0476デフォルトの名無しさん2011/01/04(火) 18:12:28
attr_がセッタ・ゲッタという認識なら改めたほうがいいと思う。
じゃあなんなん?と問われると今はちょっとそんな元気は無いので元気なかたに譲る。
0477デフォルトの名無しさん2011/01/04(火) 18:15:02
「名前重要」とかいう割に、
インスタンス変数とメソッド名に共通の名前などという都合のよい果実を求めさせるスタンスがよくない

…ような気はする
attr_ で定義されたメソッドは、なんというか
中の人の都合の内部構造に思いッきり引っ張られてて、一般ユーザー視点ではわかりにくいことがなくもない
proxy_addr= で @proxy_addr を設定するのではなく
set_proxy(addr, host=nil) で @proxy_addr と @proxy_host を設定するほうがフレンドリーじゃね、みたいな感じ
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"
■ このスレッドは過去ログ倉庫に格納されています