- 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 と書けたほうがなんかわかりやすくね、という理由で特別扱いされてる
|

|