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


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

Ruby 初心者スレッド Part 35



1 名前:デフォルトの名無しさん [2010/03/04(木) 11:00:57 ]
プログラミング言語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を読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。

448 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:18:08 ]
○引数で複数のディレクトリパスを与える
○与えられたディレクトリに対して再帰的にファイルを全て削除する
○ただし.txt拡張子が付くファイルのみ削除しない

プログラミングに不慣れながらこんなスクリプトを書こうと思い、以下のようになりました。

#!/usr/bin/ruby
require 'fileutils'
ARGV.each do |i|
FileUtils.rm(Dir.glob(i + '**/*[^(txt)]'), :force => true)
end

突っ込みどころなどありましたら教えていただけないでしょうか。
簡単なテストをすると意図したように動くのですが少し不安なので質問させていただきました。
自分で怪しいと思ってる箇所は以下の2箇所です。
@ i + '**/*[^(txt)]' こんな指定の仕方でいいのだろうか
AそもそもFileUtilを使うべきなのか

宜しくお願いします。

449 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:25:51 ]
>>448
他のスレから飛ばされてきたなら、
飛ばされましたって書かないとダメだよ

450 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:39:50 ]
>>448
死んでいいよ

451 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:41:46 ]
Dir.globのワイルドカードはあまり知らんが(Windowsユーザーなもので)
否定形なのはRubyでやったほうが無難だと思う

Dir.glob(i.sub(/\/?$/,'/**/*')).reject{|e| test(?d,e) or e =~ /\.txt$/i}


452 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:43:52 ]
i ってなんだろう?
そもそもグロブでいいのか。

453 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:45:01 ]
require 'fileutils'
noop = verbose = ARGV.include?(':noop')
ARGV.each do |s|
pathlist = Dir.glob(File.join(s, '**/*'))
pathlist.delete_if{|path| File.extname(path) == '.txt'}
pathlist.each do |path|
FileUtils.rm(path, :force => true, :noop => noop, :verbose => verbose)
end
end

$ ruby ./del.rb tgtdir :noop


454 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:45:48 ]
*[^(txt)] は、
最後の文字が 開き括弧 でも t でも x でも t でも(アゲイン) 閉じ括弧 でもない
という意味になるんじゃないか?





455 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:48:11 ]
>>453
next ですっ飛ばしていいと思う

require 'fileutils'
noop = verbose = ARGV.include?(':noop')
ARGV.each do |s|
Dir.glob(File.join(s, '**/*')).each do |path|
next if File.extname(path) == '.txt'
FileUtils.rm_r(path, :force => true, :noop => noop, :verbose => verbose)
end
end


456 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:48:38 ]
>>454
それはない



457 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:56:02 ]
$ ls
x.c x.doc x.tex x.txt
$ ruby -ve 'p Dir.glob("*[^(txt)]")'
ruby 1.8.7 (2008-08-11 patchlevel 72) [universal-darwin10.0]
["x.c", "x.doc"]


458 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:57:18 ]
はいはい勘違いゴルファーは帰ってね

459 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:58:40 ]
[^(txt)]を検証しただけじゃね?

460 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 00:00:42 ]
マニュアル嫁でよくね?

461 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 00:01:32 ]
どっちでもいいよ…

462 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 00:04:39 ]
ここは初心者スレだろ?
テンプレ読めない奴はカエレ
暴れるなら本スレでやr

463 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 00:05:49 ]
検証が漏れてないかどうかはどうやって検証すればいいのかという

464 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 00:11:10 ]
>>458
どこをゴルフと誤認したのか気になる。


465 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 01:18:47 ]
rmdir -rで綺麗さっぱり消せばいいのにw

466 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 01:54:20 ]
RubyをWindowsで開発環境構築する方法教えてください。
OSはWindows7です



467 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 01:55:11 ]
開発環境ってたとえばなーに

468 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 02:22:10 ]
>>448
「再帰的」と書かれていますが、別に find を使うような要件ではなく
引数のディレクトリ直下のみ走査すればよさそうなので、こんなかんじ
ではいかがでしょうか。

require 'pathname'
ARGV.each do |d|
Pathname(d).children.each do |f|
f.unlink unless f.extname == ".txt"
end
end

# Pathname は標準添付ライブラリだから使ってもいいよね

ところで、Ruby に限らず Perl でも Python でも glob ってシェルの
ワイルドカード展開のエミュレートだと思いますが、機能としては中途半
端(文字列の単純比較 < glob < 正規表現活用)ですし、プラットフォーム
毎に微妙な挙動差も考えるとムダにドツボにはまりそうですし、(少なく
とも「初心者」は)あまり積極的に使わない方がよくない?


469 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 02:33:02 ]
>>468
書いてるあなたがすでにglobの罠にはまっているという。
再帰的に走査したいんだよ。> **/

470 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 02:42:35 ]
Dir.glob('**/*') は許容されるべき
というか普通はこれしか使わない
残りは返ってきた配列に入った文字列を正規表現とかでどうにかする
短く1行で書かないと家にいる妻がスナイパーに撃たれるとかそういう時にのみグラブ条件を書く

471 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 04:18:21 ]
1行記述を強要する妻かw

472 名前:468 mailto:sage [2010/03/15(月) 05:11:59 ]
>>469
うへ、自分がドツボにはまっていました、というか **/* の意味を
知らんかった orz

>>470
を参考に Pathname.glob でも使えばよいのでしょうが、あえて
Find 利用ということで:

require 'pathname'
require 'find'
Find.find(*ARGV) do |f|
t = Pathname(f)
t.unlink if t.file? and t.extname != ".txt"
end




473 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 05:24:32 ]
>>471
強要しているのはスナイバーかと。>>470 は愛妻家なんですね。

474 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 08:55:46 ]
いや恐妻家なんだろうw

475 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 09:57:07 ]
要求を呑まないと何も知らない家族が射殺されるというのはわりとポピュラーな展開かと

グラブ文字処理はメソッド独自だから、明白な全抜き出し以外は正規表現などを駆使、という方向性は妥当
グラブ処理の時点で小細工すると後々遺恨になるぞ

476 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 10:41:36 ]
なるほど



477 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 12:43:17 ]
>>466
まずはテンプレくらい嫁よ

・ActiveScriptRubyをインスコ
・るびまのchmをダウンロード
・NetBeans IDE(統合開発環境)をインスコ

これでなんとかなるだろ。Rails開発ならcoLinuxかPortableUbuntu入れろ。

478 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 12:44:12 ]
>>466
あ、あと、c:\Program Files\以下にはRubyをインスコしない方がいいみたい。
RubyGemsが動作しないとかの報告があった
(今のバージョンはどうかしらん)

479 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 12:53:05 ]
ねこび〜ん勢力の工作を検知しました

480 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 13:02:44 ]
Windowsでも、XPなら
c:\usr\local\ruby
とかにインストールした方が精神衛生上よろしい気がする
UACとか入るとそう簡単にはいかないんだろうけど

481 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 13:17:04 ]
>>479
ねこび〜んはダメだね
コードの補完が遅すぎて使えない

482 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 13:35:16 ]
ActiveScriptRubyはデフォルトのインストール場所が性善説に過ぎる
ttp://d.hatena.ne.jp/kitamomonga/20100202/ruby_watir_crash_with_autoitx3
まあこれは間違えるほうが悪いんだけれども

483 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 14:06:24 ]
array = [1,2,3,4,5]とすると配列ができますが、わかんなくなりませんか?
javaとかだったら、IDEが配列だよって教えてくれるけど

やっぱり、最初にこうするべきなんですかね?
array = Array.new


484 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 14:20:31 ]
>483
ならない

Array.new はリテラルに比べると遅い。

485 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 14:21:39 ]
>>477
>・るびまのchmをダウンロード
リファレンスchmならASRに同梱されてたはず
それと初心者スレでるりまとは呼ばない方がいいよ

486 名前:483 mailto:sage [2010/03/15(月) 14:27:49 ]
>>484
そうですか
ありがとうございます



487 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 14:44:11 ]
a = [1, 2, 3, 4, 5] はわけわかんなくならないが

hogedata = []



hogedata = {}

との区別がわけわかんなくなることはある
ので、そういうときは

hogedata = Array.new

と書くことはある
要素が入ってれば配列なのか Hash なのかは一発なのでわざわざ初期化なんてしない

488 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 15:14:22 ]
>>485
> それと初心者スレでるりまとは呼ばない方がいいよ
なんで?


489 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 16:05:56 ]
というかるりまるびまってなんですか?

490 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 16:18:20 ]
ここは大喜利すべきか

491 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 16:21:11 ]
まあ、マニュアルという認識でいいよ
chm形式のマニュアル読んでれば十分

492 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 16:24:11 ]
>>488
マイナーな専門用語は避けるべき。初心者スレだし。

493 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 16:25:13 ]
>>488
まさにこの流れが理由
るびまと区別がついてないならなおさら

494 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 16:50:12 ]
何やら貢献できたようで何より
1.9.1は初心者向けじゃなかったのかー
今まさにダブルクリッコするところだったぜー
ここに来てよかった
ってことでActiveScriptRubyなるものをダウソしてきます

495 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 16:51:41 ]
ここIDないのね
494は489の人てことでw

496 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 17:31:53 ]
質問です
エクセルで書かれた名簿を整理して出力するプログラムを書いているのですが、
名前、郵便番号、住所の分離が上手くいきません
与えられた名簿は半角or全角スペースで区切られているのでsplitを使おうと試みているのですが、
例えば以下のように記述すると"―"や"県"が消えてしまいます

puts '山田 太郎   〒0000−0000 山田県山田333-333-333-333'.split(/[  〒]+/)

何か良い知恵があればなにとぞご教授お願いします
ちなみに元のプログラムではputsせず、分離後にある配列に入れています



497 名前:496 mailto:sage [2010/03/15(月) 17:34:18 ]
追記失礼します
rubyはver1,87を使用しております

498 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 17:48:49 ]
>>496
Excelってことなので、WindowsでSJISのソースコードとして、
スクリプトの先頭に

#! ruby -Ks

もっと推奨の方法があったかもしれない

499 名前:496 mailto:sage [2010/03/15(月) 17:51:44 ]
>>498
ご教授いただいたとおりにしたところ速やかに改善されました!
ありがとうございます

500 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 17:53:59 ]
Rubyが取り扱う文字のエンコーディングを指定しなければASCIIとして扱われてしまうのでそういうことになる
Ruby 1.8まででは
1 Ruby起動時にスイッチで -Ks とかで指定する
2 スクリプト先頭に
#!ruby -Ks
とか書いておくとスクリプト実行時にそのスイッチが考慮される
3 $KCODE を設定する
4 個々の正規表現のオプションでエンコーディングを指定する

ただし1,2はスクリプト自体のエンコーディングと正規表現の振る舞いの両者を変更するが
3,4だと正規表現の振る舞いを変えるだけなので
スクリプトがシフトJISで書かれていると
p "表"  # エンコーディングを正しく指定しないと 文字列リテラルが終了してないことに("\225\" と同じ扱い)
とかのいわゆるダメ文字(2バイト目が\)問題にぶち当たる

UTF-8やEUC-JPだとそのような問題は起きない(のかな?)


501 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 18:05:26 ]
るびまってRubyのマニュアルのことだったの?
Ruby Magazineの事だと思ってた

502 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 18:15:09 ]
>>491
どもです
礼するの忘れてやした

503 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 18:16:09 ]
るびま:Rubyist Magazine
るりま:Ruby reference manual

Ruby Magazineだと思いこんでると、無関係な記事が多すぎるように映るかもね

504 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 18:16:29 ]
>>501
どっちでもいいよ
いやよくはないが
初心者的にはるびまは読むべきではない
古くて有害な情報が渾然一体となっている

505 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 18:19:31 ]
>>503
それ、テンプレに入れたらどうかね?

506 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 18:24:13 ]
Rubyinstか。失礼。
上のほうよく見たらるびまとるりまの区別が付いてない(人がいる)って話だったのね
読み違えてたわ



507 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 18:27:44 ]
まだ間違ってるぞw

508 名前:496 mailto:sage [2010/03/15(月) 18:29:54 ]
>>500
亀ですが、ありがとうございます
これを気に文字コードにも意識を向けてみます

509 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 19:16:01 ]
くっ
Rubyist

510 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 19:51:11 ]
includeは名前空間を使えるようにするものってことで、おk?
C++@namespaceみたいな感じ

511 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 19:53:43 ]
なんというか include はふつうに include だと思うのだが
既存言語の機能になぞらえないと理解し難いほど複雑難解な概念なのだろうか

512 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 20:00:50 ]
includeの動作的には本当に>>444だよね
メソッドを探す順番の指定をする方法のひとつ

513 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 20:07:50 ]
モジュールの存在理由のほうがムズカシイかもしれない

514 名前:510 mailto:sage [2010/03/15(月) 20:34:24 ]
読んでいた記事が間違えていたらしい

本当の使い方は、結局なんなんだろ?
Mixinを実現するためにしか使わないのか

515 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 20:39:59 ]
モジュールは、メソッドを用途ごとにまとめるためのしくみ
メソッドがあるだけで、オブジェクトには依存しない機能のカタマリ

共通の機能をメソッドから追い出して別途メソッドを作るのと同じように、
共通の機能をクラスから追い出して別途モジュールを作る(でincludeする)というのも妥当

516 名前:デフォルトの名無しさん [2010/03/15(月) 20:45:11 ]
Mixinのためと単なる名前空間のため両方に使われる



517 名前:510 mailto:sage [2010/03/15(月) 20:54:21 ]
>>515-516
thx

518 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 22:17:04 ]
プロパティも実装されていない糞言語

519 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 22:27:30 ]
それで遊んでくれるのはPythonスレぐらいだぞ
ここは意外とDRY

520 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 22:52:35 ]
クラスインスタンス変数とは、そのクラスオブジェクトの特異クラスに属する
インスタンス変数という理解で正しいですか?

521 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 23:00:11 ]
ごめん、さっき違うスレで質問したけど理解してなかったorz

3 class Hoge
4  def self.set
5    @hoge = "dynamic"
6    $hoge = "static"
7  end
8
9  def self.out
10    puts @hoge
11    puts $hoge
12   end
13 end
14
15 Hoge.set
16 Hoge.out

実効結果
dynamic
static

$hogeと@hogeって何が違うのさ?

522 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 23:12:55 ]
理解してたらああは言わん
クラスインスタンス変数はクラスオブジェクトが存在する限り存在する

Hoge と書くことで定数 Hoge に Class クラスのインスタンスが Ruby によってセットされる
(同名のクラス定義がなかった場合は定数とみなされ、事前に代入されてない未定義定数でエラー)
で、Hoge.set を実行することでインスタンス変数 @hoge がインスタンスの中でふつうに設定される
それが属するインスタンスとは Class クラスのインスタンスで、つまり定数 Hoge が指すものだ
だから、無理矢理 Hoge の内容を nil にするとインスタンス変数 @hoge はスコープごと失なわれる

irb> class Hoge; def self.set; @hoge='hoge'; end; end
irb> Hoge.set
irb> p Hoge.instance_variable_get(:@hoge)
"hoge"
irb> Hoge = nil
(irb):4: warning: already initialized constant Hoge
irb> p Hoge.instance_variable_get(:@hoge)
nil


523 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 23:22:49 ]
特異メソッド上で書くからわかりにくい?

class Hoge
@hoge2="hoge2"
end

p Hoge.instance_variable_get(:@hoge2)

は "hoge2" を返すよ

524 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 23:38:33 ]
"プログラミング言語 Ruby" のp.326のなかほどに
クオート文字列にマッチすることを意図した正規表現の例が以下のように
載ってるんだけど,文字集合内で番号指定後方参照ってできたっけ?

/(['"])[^\1]*\1/

わがRuby1.9.1ではこうなった

re = /(['"])[^\1]*\1/
p %('\1')[re] #=> nil
p %('hoge'hoge')[re] #=> "'hoge'hoge'"

いちおう念のために言っておくと
クオート文字列にマッチする正規表現を求めているわけじゃなくて
文字集合内で後方参照や部分式呼出しができるか否かの確認ね

525 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 00:23:29 ]
>>457が何でそうなるのか解説求む

526 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 00:27:01 ]
>>525
>>454




527 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 00:28:31 ]
globってワイルドカードでも正規表現でもないのか
なんでこんな面倒なもん作ったんだ

528 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 00:31:15 ]
いや、zshの**を取り込んでるくらいで、
ワイルドカード(UNIXシェルの、だが)だよ。


529 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 00:31:34 ]
ああ勘違いしてたわ txtだけはじかれてるのかと思った

530 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 00:32:09 ]
ほぼワイルドカードじゃね?

531 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 00:32:50 ]
あら遅レス失礼した

532 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 00:33:41 ]
globにlsコンパチの引数受け付けるようにしてくれ

533 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 00:34:20 ]
>>532
UNIXで誰がファイル名展開をやってるか知ってるかい?


534 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 00:44:33 ]
えっ? 誰かがやってるなんてことあるわけないでしょう?

535 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 03:16:47 ]
echo *

536 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 03:27:47 ]
もうshellの機能をrubyに組み込むべきだなw
login shellを/bin/rubyshにできていいかもしれないw



537 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 07:53:49 ]
RubyShell って面白そうだな。
誰も使わないだろうけど。

538 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 07:55:47 ]
RashだかRushってシェルがなかったっけ

539 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 08:46:18 ]
イラネ

540 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 09:30:18 ]
とある人のウェブページに、perlをログインシェルとして使ってみた報告があるぞ。
一度読んでおくといい。

541 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 09:33:51 ]
いやRushが既にあるから

542 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 11:51:29 ]
コマンドライン引数は定数じゃないの?
普通に文字列を代入できるんだけど

543 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 12:01:40 ]
>>542
Rubyの定数は、警告 warning: already initialized constant ARGV
は出るけど代入自体はできる。

あ、あと、 ARGV << 'hoge' なんてのは「定数への代入」じゃないからな。


544 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 12:03:05 ]
$ ruby -e "ARGV=nil"
-e:1: warning: already initialized constant ARGV

いやきちんと定数として警告出ますが

というかただの定数に過ぎない
Rubyはこれを起動時から用意してるだけで、用意したあとは特別扱いをしない
ただの配列を指す定数で、配列としての動作に従う
配列だから、要素を弄る限りはオブジェクトIDが同一で、定数としての適正を失わない

irb> arr = [1, 2, 3]
irb> arr[0] = 'one'
irb> ARGV[0] = 'one'


545 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 12:18:43 ]
代入はできるけど、データのコンテナとして ARGV を使うのはおすすめはしない
ただ、これは

グローバル変数と定数を使う→
クラス変数を使う→
インスタンス変数だけを使う→
全部引数での受け渡しにする→
引数の数が大量になって鬱陶しいのでアクセサメソッド経由のインスタンス変数と引数の併用にする

というような変遷をどうしてもみんな辿るので今はまだ気にしなくてもいいとも言える

546 名前:542 mailto:sage [2010/03/16(火) 12:25:44 ]
とにかくコマンドライン引数には入れるなってことでしょ



547 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 12:47:18 ]
def hoge=
この=って何?

548 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 13:00:04 ]
>>547
そのまんま
「hoge=」 という5文字の名前のメソッド

ただ、末尾に = があるメソッド定義を Ruby は特別に扱うので、引数つきで定義しておいたほうがいい
あと、foo.hoge = と = の前に空白があっても、Ruby はとりあえず foo のメソッドの中から hoge= を探す

foo.set_hoge(v) とするよりも foo.hoge = v と書けたほうがなんかわかりやすくね、という理由で特別扱いされてる






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

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

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