Ruby 初心者スレッド Part 40
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2010/12/11(土) 15:46:15★注意★ 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を読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
0002レシピブックを第3版に
2010/12/11(土) 15:47:23Q:
いちからRubyを始める初心者向けのRuby入門書は何がありますか?
A:
プログラム作成自体の初心者なら
・「たのしいRuby 第3版 Rubyではじめる気軽なプログラミング」
http://www.amazon.co.jp/gp/product/4797357401/
文法は理解済み(orリファレンスで乗り切る既言語習得者)の場合のRuby様式を知る必携2冊目
・「初めてのRuby」
http://www.amazon.co.jp/dp/4873113679/
以下は外れが少ないとされている本です。必ず立ち読みした上で自分の目的とレベルに応じて購入してください。
・「Rubyレシピブック 第3版 303の技」(初心者向け、1.9対応)
http://www.amazon.co.jp/dp/4797359986/
・「プログラミングRuby 第2版 言語編」(初心者向け参考書)
http://www.amazon.co.jp/dp/4274066428/
・「Ruby Way 第2版」(脱初心者向け)
http://www.amazon.co.jp/dp/4798115339/
・ 「Rubyクックブック ―エキスパートのための応用レシピ集」(脱初心者向け)
http://www.amazon.co.jp/dp/4873113245/
以下の本は言語作者が書いた最新本ですがとりあえず初学者向けではありません。
・「プログラミング言語 Ruby」(言語として深く知りたい人向け)
http://www.amazon.co.jp/dp/4873113946/
0003非更新
2010/12/11(土) 15:48:12・Ruby Home Page 【公式、お役立ち度が微妙】
http://www.ruby-lang.org/ja/
・Rubyリファレンスマニュアル 【検索機能休止中、Googleなどの併用を】
http://www.ruby-lang.org/ja/man/
http://www.ruby-doc.org/ 【詳しい英語版】
・HTMLヘルプ版リファレンスマニュアル配布さん 【Windowsで便利、検索も無論可能】
http://elbereth-hp.hp.infoseek.co.jp/ruby.html
・Programming Ruby - The Pragmatic Programmer's Guide 【好評書籍の初版がネットで、ただし英語】
http://www.ruby-doc.org/docs/ProgrammingRuby/
・Rubyist Magazine - るびま 【ライブラリ紹介などの読み物、過去のコードレビューは一読の価値あり】
http://jp.rubyist.net/magazine/
・逆引きRuby 【やりたいことから探すWiki、最近元気ないので編集者募集】
http://www.namaraii.com/rubytips/
・はてなキーワード > Ruby 【うっかりどっさりまとまったリンク集、説明なし】
http://d.hatena.ne.jp/keyword/Ruby
・RubyForge 【○○をやりたい管理されたライブラリを探すならここ、英語】
http://www.rubyforge.org/
・GitHub 【○○をやりたいコードをとにかく探すならここ、英語】
http://github.com/
・日本Rubyの会 【最近はオフライン勉強会の寄り合い場と化しているので近くで勉強会があれば】
http://jp.rubyist.net/
0004最新スレに更新
2010/12/11(土) 15:49:12【RoR】Rubyについて Part 41【CPAN vs RubyGems】
http://hibari.2ch.net/test/read.cgi/tech/1281473294/
●Railsスレ
【RoR】Ruby on Rails Part11
http://hibari.2ch.net/test/read.cgi/php/1292032736/
●アンチスレ
Rubyについて(アンチ専用) Part004
http://pc12.2ch.net/test/read.cgi/tech/1249737531/
●Windows用スレ
【ActiveScript】RubyをWindowsで使うスレ【GUI】
http://pc12.2ch.net/test/read.cgi/tech/1155031689/
●GUIの使えなさを堪能するスレ
Ruby で GUI するスレ
http://pc12.2ch.net/test/read.cgi/tech/1269609576/
●ぶん投げスレ
Rubyの宿題教えてください。2限目
http://pc12.2ch.net/test/read.cgi/tech/1200175247/
●前スレ
Ruby 初心者スレッド Part 39
http://hibari.2ch.net/test/read.cgi/tech/1287623173/
Ruby 初心者スレッド Part 38
http://hibari.2ch.net/test/read.cgi/tech/1282781922/
Ruby 初心者スレッド Part 37
http://hibari.2ch.net/test/read.cgi/tech/1274121477/
0005デフォルトの名無しさん
2010/12/11(土) 15:50:300006まとめて短く、ASRのURL更新
2010/12/11(土) 15:51:15Ruby 1.8.5(非安定板)→ Ruby 1.8.6(旧安定版、長期政権)→ Ruby 1.8.7(超お勧め)
Ruby 1.9.0(旧開発版)→ Ruby 1.9.1(旧1.9系列安定版)→ Ruby 1.9.2(1.9系最新安定版)
実のところ、よくできた教科書またはトラブル時に聞き倒せる師匠がいるなら 1.9.2 から入っても特に問題はない
1.9.2ユーザーの場合は「1.9.2使ってます」と断った上で質問してほしい由
【Windows版に関するよくある疑問】
初心者の人はとりあえず ActiveScriptRuby の 1.8.7 使っておけば間違いない(mswin32)
ttp://www.artonx.org/data/asr/
の題字のでかい 「ActiveScriptRuby 1.8.7(pなんとか) with-winsock2 tcl-stub」
マニュアルはWebで見ることもできるが手元にあると便利、1.8.7 の HTML ヘルプ版が
ttp://www.ruby-lang.org/ja/documentation/
の「Rubyリファレンスマニュアル刷新計画 chm版 1.8.7用」
夢のお告げ等、何かの間違いで Ruby の知識がない初心者時代から 1.9.2 を使いたいマゾい人は
ttp://www.artonx.org/data/asr/ の「Ruby-1.9.2-p数字 Microsoft Installter Package」
「Windows版Ruby」として紹介されることのある以下の「RubyInstaller」は
これ特有のトラブルの修復知識が必要なので今のところは初心者には勧めない(mingw32)
ttp://rubyinstaller.org/
このトラブルを回避できるようになったら初級者脱出かも
0007デフォルトの名無しさん
2010/12/11(土) 15:52:230008デフォルトの名無しさん
2010/12/11(土) 18:54:45言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
0009デフォルトの名無しさん
2010/12/11(土) 20:45:54rubyはweb開発に使われていると聞きます。
出力や入力、関数などについては分かったのですが
どうやったらrubyとweb開発を繋げることができるのか分かりません。
rubyとweb開発を繋げて考えるには何をするべきなのですか?
0010デフォルトの名無しさん
2010/12/11(土) 20:46:340011デフォルトの名無しさん
2010/12/11(土) 20:55:14どうやってあそこにRubyで書くの?
0012デフォルトの名無しさん
2010/12/11(土) 20:56:580013デフォルトの名無しさん
2010/12/11(土) 20:58:14まずは「ruby web開発」でググるところから始めてみては?
いや煽りじゃなく真面目に
0014デフォルトの名無しさん
2010/12/11(土) 21:01:35JavaScriptはクライアントで動くものです。
RubyでWebアプリケーション開発、という場合にRubyを使うのはサーバ側です。
0015デフォルトの名無しさん
2010/12/11(土) 21:01:44http://jp.rubyist.net/magazine/?0011-CGIProgrammingForRubyBeginners
0016デフォルトの名無しさん
2010/12/11(土) 21:08:03ttp://www.nicovideo.jp/watch/sm5630363
0017デフォルトの名無しさん
2010/12/11(土) 21:16:19そういうことやるための環境が整備されてない言語では無理。
Java FXかAdobe FlexかMicrosoft Silverlight(かMono Moonlight)でやんなさい。
0018デフォルトの名無しさん
2010/12/11(土) 21:16:53Webブラウザ === Webサーバ (Apacheなど) === Ruby
1. Web ブラウザが Web サーバにドキュメントを要求する。
2. Web サーバはリクエストされたドキュメントを Web ブラウザに返す。
このとき返すドキュメントは既に用意されていた静的なものでもいいし
Ruby にその場で作らせた動的なものでもいい。
CGI の場合は Web サーバと Ruby は別個のプロセスであり
標準入出力と環境変数で情報をやりとりする。
それだと遅いので Web サーバに Ruby を組み込むこともある。
で、ここまで書いてから Wikipedia の CGI の記事がよさげってことに気づいたってオチ
http://ja.wikipedia.org/wiki/Common_Gateway_Interface
001918
2010/12/11(土) 21:18:080020デフォルトの名無しさん
2010/12/12(日) 00:09:38gem入れるときにコンパイル必要なものがこける
linuxだとそういうのを入れるためのコンパイル環境は簡単に入れられる。
(ubuntuならapt-get install buildeessentialとかそういうの)
Windowsだと、mingw32版ならdevkitいれればいいよね?
mswin32版の場合どうすんの?
コンパイル済みのものが別途用意されてる場合もあるけど、
なら最初からgemにプラットフォーム指定していれとけやっていつも思うんだけど
0021デフォルトの名無しさん
2010/12/12(日) 00:12:300022デフォルトの名無しさん
2010/12/12(日) 00:20:32それってWebアプリなのか・・・
Adobe AIRみたいなものだよな?
JavaFX相当のことはJRubyじゃできないんだっけ?
どうしてもRubyでやりたいというのは「Rubyに慣れてきて何でもRubyでやりたい」という意味以外ない気がするんだが、
AIRのようなRIAなフレームワークならTitanium Desktopというのがある
まだ使われているのは殆ど見ないが
0023デフォルトの名無しさん
2010/12/12(日) 00:24:14自分のマシンのコンパイラが走るようになってる
gem パッケージ作者がバイナリパッケージを提供していなくて、
自分の使用している Ruby が mswin で、
自分のマシンに VC 6 がインストールされてない場合、その gem パッケージは使用できないだろうね
それでもどーしても使いたい場合は
コンパイル環境を用意した上で、それでコンパイルされた Ruby をインストールしてないと駄目
実質的に mingw ruby + devkit (または mingw コンパイラ一式別途導入)しか選択肢がないけど…
コンパイラがインストールされてない安全に倒した Linux サーバとかでも同じ問題が実は起こる
そういう場合、Linux のソフトウェアパッケージで gem パッケージ相当が用意されてたりもする
0024デフォルトの名無しさん
2010/12/12(日) 00:36:58うむ、すごいそれっぽい
0025デフォルトの名無しさん
2010/12/12(日) 00:59:39migw32 向けに適切にコンパイルされた拡張バイナリは、mswin32 でも使用できる…ということになっている
VC6 がないなら MinGW というか GCC でコンパイルしてしまえばいい
rubygem は作者が登録しているバイナリパッケージしか探さないので
作者がmswin32名義のバイナリパッケージ(中身はmingw32製)を用意し忘れてた場合
gem install hogehoge という書き方ではインストールできないことがある
mswin32 名義のバイナリパッケージ入れてーとgem作者にメールでもするのが一番早い
002620
2010/12/12(日) 01:12:35http://hibari.2ch.net/test/read.cgi/tech/1281473294/693-695
693 名前:デフォルトの名無しさん[sage] 投稿日:2010/12/11(土) 12:25:29
windows用のバイナリがいろいろ出てるけど
それぞれの特徴とか利点欠点教えて
Ruby Install Guide::Microsoft Windows版のビルト環境による違い
に書いてあること以外で
694 名前:デフォルトの名無しさん[sage] 投稿日:2010/12/11(土) 14:46:28
>>693
mswin … ttp://www.artonx.org/data/asr/
VC6 でコンパイルされたもの、ActiveScriptRuby、メイドインヒゲのオヤジ、配布パッケージは豪華で便利
昔から「Windows版」として扱われてたので、どんな gem でも tips でも Windows 環境だと思ってくれる(mswin32)
VC6 が基本入手不可なので緩やかに終了して mingw にバトンタッチされる予定だったのだが延命中、初心者向け
mingw … ttp://rubyinstaller.org/
MinGW でコンパイルされたもの、RubyInstaller、世界の選択、配布パッケージは Ruby 本体のみ
数年前から「Windows版」として認知され始めたもの、名前は mingw や mingw32 を返す
RUBY_PLATFORM =~ /mswin/ という古い「Windows環境チェック」記述では false になるという初心者トラップ発生器
devkit で gem ソースを自前コンパイルしたり Windows チェック処理を自力書き換えしたりする必要がまだ時々ある
mswin よりはファイル IO とかが普通速度らしいので上記のライブラリ使用時の障害を自力克服できる中級者向け
cygwin … cygwin 環境でコンパイルされたもの、cygwin 常用者向けのマニアック Ruby
なんでも自分でできる人向けの選択、外野がどうこう言うことではないのでおまえらも文句言うな的な似非上級者向け
002720
2010/12/12(日) 01:15:38さすがにVC6はww
Ubuntuでもインストール直後はコンパイルできませんね
>>25
バイナリ互換性はあるんですね
mswin32名義でも中身はmingw32なんですかw
0028デフォルトの名無しさん
2010/12/12(日) 11:17:35gem install --source なんとか でなんとかの部分に mingw32 のを書いても代わりに持ってきてくれるはず
0029デフォルトの名無しさん
2010/12/12(日) 15:11:170030デフォルトの名無しさん
2010/12/12(日) 15:28:25x=232
def f(func)
...
end
p f(x)
=> "x"
0031デフォルトの名無しさん
2010/12/12(日) 15:54:34その f って、たとえば f(1) のように呼び出したら何を返すの?
0032デフォルトの名無しさん
2010/12/12(日) 15:57:25foo=232
def f(bar)
...
end
p f(foo)
=> "foo"
f(1)は未定義ということで。
0033デフォルトの名無しさん
2010/12/12(日) 16:00:25"1234"と返ってきたほうがまだ使い道ありそうだけど、どういう使い方が想定されてます?
0034デフォルトの名無しさん
2010/12/12(日) 16:02:08barには232が渡されるだけだから変数名なんて知らないか・・・。
単に
foo=232
という定義済みの変数があったとき、
後で
"foo"
という文字列を取り出したいだけなんですが・・・。
0035デフォルトの名無しさん
2010/12/12(日) 16:07:510036デフォルトの名無しさん
2010/12/12(日) 16:20:11それいただきました。
しかしわりと面倒ですね・・・。
0037デフォルトの名無しさん
2010/12/12(日) 16:24:001..4がRangeだし、俺はto_sで1..4でいいんじゃね?って思うし開発者の意図と一致したけど
何で"1234"がいいと思った?
"1234"が得たいだけなら [*1..4].to_s ででるけど、結果的だしな
0038デフォルトの名無しさん
2010/12/12(日) 16:36:50それを言うなら、何で[1,2,3,4].to_sは”1234”になるんだよ、"1,2,3,4"じゃないんだよって話にもなる
0039デフォルトの名無しさん
2010/12/12(日) 18:13:08=> "[1, 2, 3, 4]"
(´・ω・`)
004033
2010/12/12(日) 18:16:18得たいだけなら、(1..4).to_a.to_sする
0041デフォルトの名無しさん
2010/12/12(日) 18:23:00(1..1_000_000_000_000_000_000).to_s とかしてぎっしり詰まったのが返って
きたら泣く。
まぁそれだけならArrayとかも巨大だとそうなるんだけどさ、Rangeは両端
しか保持してないんだし、両端だけが文字列に表れるのは妥当だと思うよ。
0042デフォルトの名無しさん
2010/12/12(日) 18:24:17eval したら to_s のレシーバが復元できるからじゃまいか
Ruby の場合他のクラスもそうなのかは知らない
0043デフォルトの名無しさん
2010/12/12(日) 19:05:05それは String#dump の「表示されても人間が読めないコントロールコードなどを数値で表示する」機能だな
まあ文字列オブジェクトではないものを display するとはそもそもなんぞやという話はあって、
Ruby では「文字列形式への変換」を to_s が、「人間が読める形式への変換」を inspect が司ってる
んで関数的メソッド puts や print は to_s を、関数的メソッド p は inspect を呼ぶ
そのクラスの製作者が「このクラスのオブジェクトの文字列的表現は○○だ!」と決めたのがto_sで返る
つまりRangeを作った人が考えるところの「Rangeオブジェクトの文字列的表現」が "(初端..終端)" なのだろ
これは inspect も同じだ(p で表示するのもこの形式で充分だと思ったのだろう)
あと Range オブジェクトは>>41の言うように両端しか持ってないので、
「途中を具現化」したものはRangeオブジェクトじゃない別のものになるよ
[1,2,3, 5,6, 8] という配列を puts して [1-3, 5, 6, 8] って勝手に省略されてたらムキーだろ
「中身」が欲しい場合はユーザーが手作業で行う
0044デフォルトの名無しさん
2010/12/12(日) 19:07:550045デフォルトの名無しさん
2010/12/13(月) 06:08:53Railsを参考に仕様としましたが、activerecordだったりactive_recordだったりしてよくわかりませんでした。
0046デフォルトの名無しさん
2010/12/13(月) 07:52:58gem の名称は基本的にアンダースコアで区切る
active_record が現代的(いや、1語の造語とみなすという運用もあるけどさ)
そして、アンダースコア区切りをキャメルケースしたもの(ActiveRecord)の名前か
アンダースコア区切りから容易に関係性を想定可能で他と被らないような名前の module で全体を包む
require 'active_record' と、アンダースコア区切りの gem 名はそのまま require に書けるようにする
ハイフンで foo-bar-baz と区切ることもあるが、
これは Ruby での Foo::Bar::Baz の対応と近似してることが望ましく、また、
Foo というクラスやライブラリが既にこの世に存在していることが望ましい
net-http-persistent なら Net::HTTP::Persistent というクラスなりモジュールなりの階層が存在して欲しい
自作のライブラリのクラス構造を gem 名にハイフン区切りで反映することは避けたほうがよい
require 'net/http/persistent' と、ハイフンを / に変えただけで require に書けるようにする
あと、gem 名の中に大文字使う奴は死刑
require するとき大文字で書くべきか小文字のままでいいのか迷うじゃないか
というようなことが
ttp://blog.segment7.net/articles/2010/11/15/how-to-name-gems
に書いてあったり書いてなかったりする
0047デフォルトの名無しさん
2010/12/13(月) 11:31:53m = MyMatrix.new
として
(1) m.set [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1]
(2) m.set = [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1]
(3) m.matrix = [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1]
(1)は他との兼ね合いで×(2)も変だし(3)かなと思うのですがどうでしょうか。
0048デフォルトの名無しさん
2010/12/13(月) 11:40:22と思ったがそういう話ではなかった
マス目という意味でのマトリックスなのね
newになにもないならnewの引数にするのが普通だと思う
0050デフォルトの名無しさん
2010/12/13(月) 11:52:42MyMatrixとやらの中でデータがどう扱われているかによるだろ、そりゃ
>>48の一行目で結論にならなかったことからして配列の配列が入ってるデータではないんだろうけど
ふつうは「この配列は何のデータか」を考えて、
データ配列ごと引数で指定する方法なのならそれの名前をもつ writer なメソッドにすると思う
mydata.nanika = [16桁]
みたいな
0051デフォルトの名無しさん
2010/12/13(月) 11:57:43005247
2010/12/13(月) 12:37:23MyMatrixのように「何とか」が自明でないときは、どうすればいいかという話です。
例えで出しただけなのでrowとかcolumnとか言われても困る。
0053デフォルトの名無しさん
2010/12/13(月) 12:57:26MyMatrix という名称や配列代入という行為は一般的過ぎて何も想起されないと思っている人 >>47
という差のような気もする
0054デフォルトの名無しさん
2010/12/13(月) 13:00:15たぶんインスタンス変数名をどうすればいいですかという質問になりそうな気もするな
既存のデータ系のクラスと同じような動作にしておいて、同じ名前のメソッド使うというのはどう
0055デフォルトの名無しさん
2010/12/13(月) 13:04:22005647
2010/12/13(月) 15:25:47ありがとうございました。
0057デフォルトの名無しさん
2010/12/13(月) 17:11:08捨て台詞吐いて逃亡か。最悪だな。
0058デフォルトの名無しさん
2010/12/13(月) 18:31:010059デフォルトの名無しさん
2010/12/13(月) 21:14:33ActiveRecordのgem名は「activerecord」だから、ちがうんじゃない?
それからそのサイトの説明だと
> If you're adding functionality to another gem use a dash.
とあるから、既存のgemに機能をつけたす場合にダッシュ(ハイフン)を使えとあるから、そう説明しようよ。
0060デフォルトの名無しさん
2010/12/13(月) 21:43:530061デフォルトの名無しさん
2010/12/13(月) 21:47:54とくにないです
自分の使い慣れた統計システムのRubyバインディングとか探してください
0062デフォルトの名無しさん
2010/12/13(月) 22:24:59なるほど、バインディングですか
これから始めるため使い慣れた統計システムは特に無いので
R使ってやってみます。ありがとう
0063デフォルトの名無しさん
2010/12/14(火) 00:26:20d = Derived.new
d.hello
で基底クラスの方のhelloを呼びたい。
0064デフォルトの名無しさん
2010/12/14(火) 01:00:42class Derived
alias base_hello hello
def hello; end
end
Derived.new.base_hello
あと、Derivedなんていう用語を使うのはC++くらいじゃね?
0065デフォルトの名無しさん
2010/12/14(火) 01:03:24Base.instance_method(:hello).bind(d)[]
とか?
006663
2010/12/14(火) 01:31:01d->Base:: hello ();
d->Derived:: hello ();
どうするか考えます。
0067デフォルトの名無しさん
2010/12/14(火) 10:46:01puts "Foo = " + foo
が、 TypeError: can't convert Foo into String になるのはなぜ。
Stringに変換するために必要なメソッドは?
0068デフォルトの名無しさん
2010/12/14(火) 10:54:36to_sを明示的に呼ぶ
Rubyは原則として暗黙の型変換のような振る舞いはしない
puts "Foo = " + foo.to_s
0069デフォルトの名無しさん
2010/12/14(火) 10:59:45puts "Foo = " + foo
は
"Foo = " + foo
したものの返り値を puts メソッドに渡してる
"Foo = " + foo
の時点でエラーになるはず
一応、 String#+(other) は other#to_str を呼んでいるので
Foo#to_str を Foo#to_s のエイリアスにでもしておけばいいんだが、
より現実的には>>68だと思う
0070デフォルトの名無しさん
2010/12/14(火) 11:04:25>>67は Foo クラスに to_s と to_str の 2つのメソッドを要求してるのだな
irb> class Foo; def to_s; "FOO!"; end; end
irb> puts "Foo.new is #{Foo.new}"
Foo.new is FOO!
007167
2010/12/14(火) 11:17:32理解しました。to_sとto_strの2つのメソッドを定義しないといけなかったのですね。
似たような名前の関数を2つ提供するのは微妙だからto_sだけにしておきます。
0072デフォルトの名無しさん
2010/12/14(火) 11:42:35to_s は「このオブジェクトを文字列で表現するとこうなります」の意味
不用意に to_str を定義してはならない
to_str の部分でエラーが出ない = このオブジェクトは String 互換
という風に判断されるから
obj.kind_of?(String) && obj.to_s のようなもんだと思ってくれ
0073デフォルトの名無しさん
2010/12/14(火) 12:34:040074デフォルトの名無しさん
2010/12/14(火) 13:02:57あのへんはいろいろ揉めたらしいね
to_str 自体が「既存の標準ライブラリに迎合する動作」としての使われ方をしてたから
0075デフォルトの名無しさん
2010/12/14(火) 15:37:02Ajax アプリケーションを作成中で、サーバーサイドで Ruby 1.8.7 を使用しています。
クライアントサイドから Get で 〜〜.rb に引数つきでアクセスしようとしています。
(たとえば「〜〜.rb?No=〜&Name=〜」のようなかんじで)
しかし、Ruby 側でその引数(No=〜&Name=〜)を取得する方法も、
クライアントサイドに値を返す方法(クライアントで .responseText で取得するやつ)もわかりません。
どうやったらよろしいでしょうか?
馬鹿馬鹿しい質問なのだとは思いますが、教えてください。お願いします。
0076デフォルトの名無しさん
2010/12/14(火) 16:15:14そもそも現状の Ajax アプリケーションは Web アプリケーションの最終進化形態のひとつだ
(まあ、いろんな意味で)
サーバサイドとクライアントサイドと通信手段の基礎となる知識をすべて吸収した上で応用するという形になる
CGI 作ったことがないなら、たぶん無理だと思う
素直に Ajax 連携に定評のある他の言語使ったほうがいいんじゃないかな
0077デフォルトの名無しさん
2010/12/14(火) 16:42:310078デフォルトの名無しさん
2010/12/14(火) 16:54:00そうですか…そんなにハードルの高いことだったのですね…。
かなり軽く考えていたかも知れません…。
しかし、心からの親切心でそう言っていただいていると思うので
大変恐縮なのですが、私にも事情があり、どうしても諦めるわけにはいかないのです。
ほんとうにありがとうございます。
>>77
そうなんですね。
しかし今から全く未経験の Rails に手を出す余裕は無いのです。
どうもありがとうございます。
0079デフォルトの名無しさん
2010/12/14(火) 17:14:350080デフォルトの名無しさん
2010/12/14(火) 17:34:50誤解させてすみません。
どうしても Ruby を使わなければならないのです。
自分もできたら他言語でやりたいっす…。
0081デフォルトの名無しさん
2010/12/14(火) 17:42:540082デフォルトの名無しさん
2010/12/14(火) 17:44:59迷える子羊のために三択を用意した
1. Ruby標準添付のCGIモジュールについて調べる
でもってローカルにApacheでも立ててクエリ文字列とPOSTの内容と
環境変数をダンプできるCGIを作って動作するところまで頑張る
そこまでいければなんとかなる
2. 諦める
さあ選んでくれ
0083デフォルトの名無しさん
2010/12/14(火) 18:03:400084デフォルトの名無しさん
2010/12/14(火) 18:10:400085子羊
2010/12/14(火) 19:01:23「1.」の一択でお願いします。早速学習を始めます。
いちおう Apache はローカルにインストールしてますが、Apache に関する知識は皆無です。
環境が Windows でブラウザで
「http://コンピュータ名/htdocsフォルダに置いてあるファイル名」という
アドレスにアクセスすることでそのサイトにアクセスできる状態にしています。
それで参考にお聞きしておきたいのですが、
「クエリ文字列とPOSTの内容と〜〜動作するところまで頑張る」という部分は
CGI モジュールについて学習すれば理解・実現できる内容ですか?
それとも Apache に関する書籍なども購入して学習する必要がありますか?
ほんとうにありがとうございます、救われた思いです。
とりあえず CGI モジュールについて学習します。一生懸命頑張ります。
0086デフォルトの名無しさん
2010/12/14(火) 19:33:190087デフォルトの名無しさん
2010/12/14(火) 19:53:41ていうかプログラミングに対する知識と経験が絶望的に足りないと思われ
「ふつう」の知識と経験があるなら>>75の場所では詰まらないと思うの
Ajax とは、みたいな説明や適当な Ajax の解説やサンプルを読んである程度理解したなら
Ajax として目新しいところとそうでないところの判断くらいはついて欲しい
つまりはこの人「何も作ったことがない」んだと思うよ
運転経験ない人に長距離夜行トラックでの運送なんて任せられるかw
素直に単純な CGI とかの日曜の自家用車ドライブからはじめろw
0088デフォルトの名無しさん
2010/12/14(火) 19:55:26CGIの勉強をする(Rubyで)
HTTPの勉強をする
JavaScriptの勉強をする
Ajaxの勉強をする(Rubyで)
こんな順番?
0089デフォルトの名無しさん
2010/12/14(火) 20:01:38CGI 無関係な Ruby の勉強をする
Apache の基本的な使い方を学ぶ
CGI の勉強をする(Ruby で)
HTTP の勉強をする
JavaScript の勉強をする
Ajax の勉強をする(Ruby で)
こうだろ
…なんかめんどくさいな、どうせ表示するデータの取り扱いでも挫折するんだろうし、最初から Rails にするか
なんか、動作が遅いですとか言われそうな気もするが
でも、Rails が本番サーバで動作するかどうかのチェックも要るな
安価なレンタルサーバだとまともに動かなかったりするし
0090デフォルトの名無しさん
2010/12/14(火) 20:45:550091デフォルトの名無しさん
2010/12/14(火) 20:45:570092デフォルトの名無しさん
2010/12/14(火) 20:50:42HTMLに関しては何がわかってないの?この人
0093デフォルトの名無しさん
2010/12/14(火) 20:53:32単に要素を列記しただけだと思うぞ
>>90
そもそも「カンタンにWebアプリを作成!」というのが幻想というか妄想なので…
情報商材みたいなもん
0094デフォルトの名無しさん
2010/12/14(火) 21:07:51* クエリ文字列の取得
* XMLHttpRequest#responseTextの取得
これだけなのになんでここまで盛り上がれるのん
後者はRuby関係ないからスルーとして
前者はcgi.params, cgi.query_string, ENV['QUERY_STRING']
その他フレームワークの類似機能を使用する、で終了じゃない
0095デフォルトの名無しさん
2010/12/14(火) 21:13:340096デフォルトの名無しさん
2010/12/14(火) 22:10:21ほかの人のアドバイスと被る部分もあるが
まずは、Rubyで簡単なCGIスクリプトを作るといい
内容はHelloWorldレベル(簡単なメッセージ表示くらい)で十分だ
作り方は検索したらいくらでも出てくるし、>>94のアドバイスも参考になる
ブラウザ上からそのCGIスクリプトにアクセスして、画面表示ができたら
AjaxでそのCGIスクリプトにアクセスして
CGIの出力を持ってくる(JavaScript側で出力を受け取る)ところまでやる
ここまでできれば、後は応用でなんとかなると思う
0097デフォルトの名無しさん
2010/12/14(火) 23:47:25あとrails勉強した方が結果的には最短距離かと
0098デフォルトの名無しさん
2010/12/15(水) 00:40:41最近(っても古いか)の騒ぎ立てでRails使わないのにRubyやってんの?ってのが嫌。
0099デフォルトの名無しさん
2010/12/15(水) 01:08:38CGI部分もあまり出来が良くないって聞くよね
素直にPHPでやったほうがいいのかな
0100デフォルトの名無しさん
2010/12/15(水) 01:11:32と話をややこしくしてみる
0101デフォルトの名無しさん
2010/12/15(水) 01:42:53Rubyで書けます
これがメリットだと感じないならRubyでWebアプリケーション作るのやめたほうがよい
いやかなりマジで
0102デフォルトの名無しさん
2010/12/15(水) 01:44:35にはSinatraに一票入れたいところだが、次に>>75は
レンタルサーバーでSinatraが動きません
(もしくはめちゃめちゃ遅いです、使い物になりません)
と言ってくるので、cgi.rbでよいと思う。
0104デフォルトの名無しさん
2010/12/15(水) 02:25:23rbreadline.rbを使っているRuby使っている人かもしれない。
readlineがライセンスの問題があるためRubyでreadlineを実装しようとしているもののようだけど、
Windowsでは日本語が入力できなかったり、行を編集しようとすると遅かったりどうにかすると落ちたりするなこれは
pikでRuby 1.9を入れるとrbreadlineが標準添付されたRubyが入るのだが、これだと実質irbが使えないな
0105デフォルトの名無しさん
2010/12/15(水) 03:00:26irb上で上下カーソルの入力履歴がでなくなりました。
これないとめっちゃ不便なんだけど、どしたらよいの?
0106デフォルトの名無しさん
2010/12/15(水) 03:09:470107デフォルトの名無しさん
2010/12/15(水) 06:17:24あなたが神か?
0108デフォルトの名無しさん
2010/12/15(水) 08:20:47ありがとうございます。
これは大変良さげなのですが、Windows用バイナリは何処に?
cygwin入れてコンパイルするしかないかな。
0109デフォルトの名無しさん
2010/12/15(水) 08:23:530110デフォルトの名無しさん
2010/12/15(水) 09:53:19ttp://www.cymric.jp/maxima/maxima-winxp.html
のサイトでこっそりと
cygwin-rlwrap-0.30.zip
っていうファイルがあるみたい
0111デフォルトの名無しさん
2010/12/15(水) 10:25:33デプロイだけならHerokuは簡単
ただし動作環境にクセがある。
動作環境が満たされるなら遊びのちょっとしたものなら無料の範囲で作れるし、
そうでないなら金払えるなら、サーバー管理の手間かからないしいいんじゃね?
Google App Engineもデプロイだけは簡単だけど死ぬ
VPSでの動作ならRails並に簡単、いつもの慣れた環境をつくってデプロイできる。
え?・・・このレスに有益な情報がないって?
0112デフォルトの名無しさん
2010/12/15(水) 10:52:13みなさん、たくさんの親切なアドバイス、ほんとうにありがとうございます。
みなさまからいただいたアドバイスを参考に学習・開発を進めてまいります。
>>87
おおむね、おっしゃるとおりでございます。
Web アプリケーションの作成は今回が初めてでわからないことだらけです。
>>96 も仰ってあったとおりまずは素直に単純なところから始めようと思います。
ご親切にありがとうございます。
>>88 >>89
参考になります。>>93 のおっしゃるとおり、
その中からわかってない部分を適宜拾い集めて学習させていただきます。
ありがとうございます。
>>94
ありがとうございます。
お陰さまで何とかなりそうな気がしてきました。
参考にして調べてみます。
>>96
まず単純なことから試してみます。
基本ですよね、視野が狭くなって忘れていました。
親切なアドバイスが身にしみました、ありがとうございます。
0113デフォルトの名無しさん
2010/12/15(水) 12:58:490114デフォルトの名無しさん
2010/12/15(水) 14:04:34Rubyならどうやって書くの?
<WebBrowser Source="http:..."/>
0115デフォルトの名無しさん
2010/12/15(水) 14:11:50重複
ttp://hibari.2ch.net/test/read.cgi/tech/1287623173/882
0116デフォルトの名無しさん
2010/12/15(水) 14:13:24回答がないし、スレ落ちてるから質問しているんだが
それがだめな理由でもあるのか?
0117デフォルトの名無しさん
2010/12/15(水) 14:20:13あきらめれ
0118デフォルトの名無しさん
2010/12/15(水) 14:23:52回路図示して、Rubyで炊飯器のタイマー起動するにはどうすればいいですかみたいな話に近い
0119デフォルトの名無しさん
2010/12/15(水) 14:25:140120デフォルトの名無しさん
2010/12/15(水) 14:26:57WEBに強いんでしょ?
0121デフォルトの名無しさん
2010/12/15(水) 14:48:430122デフォルトの名無しさん
2010/12/15(水) 14:50:11嫌われるといいと思います。
0123デフォルトの名無しさん
2010/12/15(水) 14:57:58世田谷区民会館ぐらいなら埋まりそうなカードだな
0124デフォルトの名無しさん
2010/12/15(水) 15:19:59勝手にWEBに強いことにしないで欲しいな。
0125デフォルトの名無しさん
2010/12/15(水) 15:26:28<Button/>
たったこの1行でボタンが配置できますが
Rubyだとどうするんですか?
0126デフォルトの名無しさん
2010/12/15(水) 15:30:38InternetExplorerが公式にRubyをサポートしてからまたおいで
あなたはクライアントとサーバサイドの区別がついていない
0127デフォルトの名無しさん
2010/12/15(水) 15:32:220128デフォルトの名無しさん
2010/12/15(水) 15:33:31見てて微笑ましかったのだが
0129デフォルトの名無しさん
2010/12/15(水) 15:33:59再現してみるからLinuxで動くコードちょうだい
0130デフォルトの名無しさん
2010/12/15(水) 16:04:08どうにかしてRubyを馬鹿にして悦に浸って苦しい日常生活から現実逃避したい低レベルなプログラマさん
kill myselfをお勧めします
0131デフォルトの名無しさん
2010/12/15(水) 16:17:370132デフォルトの名無しさん
2010/12/15(水) 16:22:480133デフォルトの名無しさん
2010/12/15(水) 16:25:360134デフォルトの名無しさん
2010/12/15(水) 16:53:00print "<Button/>"
でいいんじゃないの?
0135デフォルトの名無しさん
2010/12/15(水) 17:51:21>>125はおそらくHTMLじゃないぞ
0136デフォルトの名無しさん
2010/12/15(水) 18:03:48静的にコンパイルするとb = Button.newみたいなコードが得られる
動的にロードするのならIronRubyでも出きるだろう
0137デフォルトの名無しさん
2010/12/15(水) 18:15:33kill myself
0138デフォルトの名無しさん
2010/12/15(水) 18:24:41Array.ForEach(files,f=>Console.WriteLine(f));
0139デフォルトの名無しさん
2010/12/15(水) 18:27:01できてないって言って追っ払っちゃおうか
面倒だし
0140デフォルトの名無しさん
2010/12/15(水) 18:28:100141デフォルトの名無しさん
2010/12/15(水) 18:29:11できません
あなたの勝ちです
では他の人次の質問どうぞ
0142デフォルトの名無しさん
2010/12/15(水) 18:55:17その値に force_encoding して返してくれるぞ、という話を前スレでしようと思ってたらスレが終わってた
irb1.9> p open("http://www.2ch.net/").read.encoding
#<Encoding:ASCII-8BIT>
irb1.9> p open("http://www.2ch.net/", 'r:Windows-31J').read.encoding
#<Encoding:Windows-31J>
0143デフォルトの名無しさん
2010/12/15(水) 19:04:190144デフォルトの名無しさん
2010/12/15(水) 19:19:140145デフォルトの名無しさん
2010/12/15(水) 19:28:540146デフォルトの名無しさん
2010/12/15(水) 19:45:19> それは Net::HTTP の仕事ではないというかそんな根底部分で余計なことすんなということらしい
> open-uri ならヘッダの Content-Type を読んで force_encoding で設定してくれるが、
>
> irb1.9> require 'open-uri'
> irb1.9> p open("http://dailynews.yahoo.co.jp/").read.encoding
> #<Encoding:EUC-JP>
> irb1.9> p open("http://sankei.jp.msn.com/").read.encoding
> #<Encoding:Shift_JIS>
> irb1.9> p RUBY_VERSION
> "1.9.2"
>
> レスポンスヘッダの Content-Type ほど信用ならないものもないのでまあ掛け捨て保険程度
0147デフォルトの名無しさん
2010/12/15(水) 20:00:13例えば2次元画像の特定の領域(x,y,width,height)を指定するのに
こう書くのは問題ですか。他にもっといい書き方があれば教えてください。
image.pixels[x,y,width,height] = pixels
0148デフォルトの名無しさん
2010/12/15(水) 20:10:43そんな書き方してたら座標変換するとき面倒だろ
0149デフォルトの名無しさん
2010/12/15(水) 20:17:16あ、いやそれは問題にしてなくて例えば
pixels[x..x+width, y..y+height]
pixels[[x,y], [width,height]]
pixels[x,y][width,height]
みたいな書き方の方が良いのかなという話です。誤解させてすみません
0150デフォルトの名無しさん
2010/12/15(水) 20:19:20colorならわかるが
0151デフォルトの名無しさん
2010/12/15(水) 20:58:500152デフォルトの名無しさん
2010/12/15(水) 21:57:32うん、Content-Type ヘッダの charset を ASCII-8BIT の代わりにセットする代わりに
引数指定の文字エンコーディング名をセットするようにできます、という話だよね
0153デフォルトの名無しさん
2010/12/15(水) 23:04:09あのコードがそのように解釈できるのか?
どうみても、1pixelに複数pixelを割り当てているようにしか見えないが
CopyRect(Rect srcImage,Rect destImage)
とかにすべきだろ
0154デフォルトの名無しさん
2010/12/15(水) 23:17:45左辺は範囲じゃん
ary[start,length] = ary2の二次元版
0155デフォルトの名無しさん
2010/12/15(水) 23:51:030156デフォルトの名無しさん
2010/12/16(木) 00:06:450157デフォルトの名無しさん
2010/12/16(木) 00:15:290158デフォルトの名無しさん
2010/12/16(木) 01:13:150159デフォルトの名無しさん
2010/12/16(木) 01:54:13この場合はforce_encodingが正しい
0160デフォルトの名無しさん
2010/12/16(木) 08:09:45Encoding は nil が許されないから、必ず何らかの名前がついている
文字エンコーディングを特定できない、または特定しないという印が ASCII-8BIT こと BINARY
ネット経由のファイル取得でエンコーディングを特定できる情報がないから ASCII-8BIT だったものに
force_encoding を使って人間が知ってる情報で名づけてあげることの何がまずいというのか
0161デフォルトの名無しさん
2010/12/16(木) 11:39:38時間はかかりましたが、やりたかったことができました。
余計かな、とは思いましたがみなさんのご協力がなければ
間違いなく先に進めていなかったので、ご報告させていただきます。
本当に助かりました。ありがとうございました。
0162デフォルトの名無しさん
2010/12/16(木) 11:42:38どうすればできますか?
0163デフォルトの名無しさん
2010/12/16(木) 12:27:000164デフォルトの名無しさん
2010/12/16(木) 12:39:54そういう話題ならマジレスするぜ。
ウィンドウ作成とキー入力、サウンドはqtrubyを使うのが一番簡単。
あとはOpenGLを使ってごりごり書く。
3Dシューティングゲームならこれで作れる(実際に作った)。
ただしそこからPS2レベルのゲームを作るにはかなり努力しないといけない。
表示だけ考えても、そこからモデルのロードとスキニング、アニメーションを自前で実装する必要がある。
これらを実装するのはそれなりに知識と時間が必要。
なので今ちょうどそれらを全部含んだM3Gという携帯電話で使われている3D描画APIを実装して
Rubyから使えるようにしている作業の真っ最中。
もう動いてるけど、さすがにまったく知識のない人間には勧められる完成度はない。
とりあえずOpenGLを使って簡単なゲームを作ってみるべし。
ちなみにモデルビュアーのスクリーンショット。これが100%Rubyで書かれている。
この画像ではわからないけどちゃんとアニメーションしている。
http://www.gazo.cc/up/21983.png
0165デフォルトの名無しさん
2010/12/16(木) 12:47:440166デフォルトの名無しさん
2010/12/16(木) 12:48:360167デフォルトの名無しさん
2010/12/17(金) 09:34:26おい、スルーし・・・
ちょw
特定しますた
しかし3Dゲーム作るなら、ゲームエンジンのバインディング作ったほ(ry
0168デフォルトの名無しさん
2010/12/17(金) 09:41:30のぞかせてもらった。
M3GのAPIの互換実装をつくって、別にRubyのバインディングを作ってるのか。
M3Gって需要あるんかいな
0169デフォルトの名無しさん
2010/12/17(金) 10:48:180170デフォルトの名無しさん
2010/12/17(金) 11:04:06ではWindowsを移植してください
0171デフォルトの名無しさん
2010/12/17(金) 12:14:27PSレベルのものは作れそうだ
0172デフォルトの名無しさん
2010/12/17(金) 12:19:04「公開関数が2つ以上関数を引数にとるなんてことめったにねぇよ」
って発想が根底にある?
0173デフォルトの名無しさん
2010/12/17(金) 12:21:19○高階関数
0174デフォルトの名無しさん
2010/12/17(金) 12:33:08たしかそんなような話は聞いたことがある
0175デフォルトの名無しさん
2010/12/17(金) 12:58:09MLかどっかのログくれ!!
俺もブロック見たときびっくりした。何で1個なんだよって。
でも意外にif else end (ブロック2つみたいなもの)のようなものを作ることがなくて困らない、
というかそういう作り方になってしまう。
どうしてもやりたければlambdaでいい。
1個の場合は楽。バランスなのかも
0176デフォルトの名無しさん
2010/12/17(金) 13:02:28みたいなことを言ってた記事を見たことあるが、
なんでもかんでも未来を見通せるわけじゃない。
高階関数を組み入れただけでもすばらしいよ。
0177デフォルトの名無しさん
2010/12/17(金) 13:20:52ttp://www.rubyist.net/~matz/20070512.html#p04
> 高階関数を持つ言語(OCaml)のライブラリを精査したところ、
> 2239関数のうち、関数引数を取らないものが87.2%、ひとつだけ取るものが12.1%で、ふたつ以上とるものは0.7%であった。
> ここからわかることは、プログラミング言語は 99.3%を占める高階関数(ブロック)を0または1個とるものに最適化するべきであり、
> めったにない二つ以上ブロックのために、それ以外のものを「ゆがめて」はいけない、ということ。
ttp://itpro.nikkeibp.co.jp/article/COLUMN/20050930/221979/
> もちろん,メソッド呼び出しに1つだけしかブロックを付けられないという制約はあります。
> しかし,実際に複数のブロックが必要になることはほとんどありません。
Ocamlの論文はけっこう引用されてて、
「実利を取って引数1個限定でシンプルにしてたRubyは勘がよい」という評価がいくつかあったはず
0178デフォルトの名無しさん
2010/12/17(金) 13:30:39Rubyだとたとえば「ブロックが1個限定なのってよく考えたら変じゃね?」という話
def foo(arg1, arg2, &block)
end
と定義して
foo(111,222){|x| ... }
と利用するわけだけど、これって
def foo(arg1, arg2, &block1, &block2)
end
と定義して、現行のRuby文法上ではうまく書けないんだがなんか
foo(111,222){|x| ... }{|y| ... }
みたいに複数ブロック実行できるようにしたとしても別にデメリットはないんじゃね、
複数引数自体は自然だし、いざという時用に用意しててもよくね? という話
0179デフォルトの名無しさん
2010/12/17(金) 13:59:13でたでた、良くある初心者ならこれくらいなら理解できるだろうという上から目線。
そもそも高階関数そのものがわからないのに解説して貰ってもねぇ-
0180デフォルトの名無しさん
2010/12/17(金) 14:02:03defで設定した関数の中で関数を呼ぶもの。
これが1個
def f(g,a)
g.call(g.call(a))
end
これが2個
def f(g,a)
g.call(g.call(g.call(a)))
end
0181デフォルトの名無しさん
2010/12/17(金) 14:12:49Rubyで高階関数を実現するには
lambda, Procとブロックの関係
>>176の真偽も含めて
今日のRuby初心者スレは盛りだくさんだな
0182デフォルトの名無しさん
2010/12/17(金) 14:22:48まるで一人で書いているかのようだ
0183デフォルトの名無しさん
2010/12/17(金) 15:50:31def bar(obj=nil)
obj.foo
end
private
def foo
puts "foo"
end
end
Foo.new.bar(Foo.new)
0184デフォルトの名無しさん
2010/12/17(金) 15:52:010185デフォルトの名無しさん
2010/12/17(金) 16:40:55均等にばらつくほうが不自然
0186デフォルトの名無しさん
2010/12/17(金) 18:04:03Goldの問題だな
0187デフォルトの名無しさん
2010/12/17(金) 18:12:08プログラマは以外と規則正しい生活をしてるってことだな
0188デフォルトの名無しさん
2010/12/17(金) 18:21:140189デフォルトの名無しさん
2010/12/17(金) 18:22:190190デフォルトの名無しさん
2010/12/17(金) 19:05:01a1.foo #=> エラー
a1.instance_eval { foo; self.foo; a1.foo; a2.foo } #=> いずれも可能
fooは、A(とそのサブクラス)のインスタンスのコンテキストで使える。
privateと比較すると、selfに加えて、自クラス・サブクラスの他の
インスタンスのfooが呼べるってこと。
比較判定で他の兄弟インスタンスの属性を参照するメソッドなどがprotectedになりうる。
Javaのprotectedは、コンテキスト関係なく、サブクラスのインスタンスに
対して使用できるかどうかを示す。
0191デフォルトの名無しさん
2010/12/17(金) 19:11:21呼び出しの場所も形式も制限なし
private
呼び出しの場所の制限はないが、形式に制限あり
レシーバつきだと呼び出せない
protected
呼び出しの場所に制限があるが、形式には制限なし
所属クラスか継承クラスの def ... end の中以外では普通はエラー
class C
def priv; end
def prot; end
private :priv
protected :prot
def check_priv(c=nil)
priv rescue warn "cannot priv"
self.priv rescue warn "cannot self.priv"
(c.priv if c) rescue warn "cannot c.priv"
end
def check_prot(c=nil)
prot rescue warn "cannot prot"
self.prot rescue warn "cannot self.prot"
(c.prot if c) rescue warn "cannot c.prot"
end
end
irb> C.new.check_priv(C.new)
cannot self.priv
cannot c.priv
irb> C.new.check_prot(C.new)
irb>
0192デフォルトの名無しさん
2010/12/17(金) 19:11:29ちゃんとカウンセラ常駐の、大手ソフト会社は、メンタルケアを行う事でストレスによる休職や離職が5年前は7%だったのが、昨年は0.7%に減少し、年間2億円のプラス効果が出たとかw
この会社は当然新卒にも大人気らしい。
0193デフォルトの名無しさん
2010/12/17(金) 19:15:02>比較判定で他の兄弟インスタンスの属性を参照するメソッドなどがprotectedになりうる。
というかそれしかないんよね
自分か仲間のオブジェクトをメソッド内に連れ込んだ場合に限ってそいつが喋れるってどんだけ秘密なの
ちなみにどれも __send__ で呼び出すことは可能なので、あんまり防御効果はない
0194デフォルトの名無しさん
2010/12/17(金) 19:33:230195デフォルトの名無しさん
2010/12/17(金) 20:44:41class C
def hoge
fuga = 0
# fugaメソッドを呼び出すには?
fuga
end
private
def fuga
"fuga"
end
end
puts C.new.hoge
0196デフォルトの名無しさん
2010/12/17(金) 21:12:110197デフォルトの名無しさん
2010/12/17(金) 21:54:270198デフォルトの名無しさん
2010/12/17(金) 22:06:42同じクラス内で同じメソッド名を作っておく意味ってあるの?
0199デフォルトの名無しさん
2010/12/17(金) 22:07:29class C
def hoge
fuga = 0
# fugaメソッドを呼び出すには?
__send__(:fuga)
end
private
def fuga
"fuga private"
end
end
puts C.new.hoge
0200デフォルトの名無しさん
2010/12/17(金) 22:11:08いわゆる、ローカル変数名がたまたま被るという話だろう
それでいてローカル変数の名称も変更できずメソッド名も変更できずロジックの変更もできない
という特殊環境下でたかだか __send__ を魔術と抜かすんだからどうにもならん
0201デフォルトの名無しさん
2010/12/18(土) 00:13:26だから、「たいていのprotectedの使い方は間違い」だと疑ったほうが
いいんだよね。RailsとかRailsとか。
0202デフォルトの名無しさん
2010/12/18(土) 00:42:490203デフォルトの名無しさん
2010/12/18(土) 01:18:230204デフォルトの名無しさん
2010/12/18(土) 03:51:20メソッドを確実に呼ぶだけだ
ただまあちょっとばかし可視性とか無視してるが
0205デフォルトの名無しさん
2010/12/18(土) 10:34:040206デフォルトの名無しさん
2010/12/18(土) 11:20:420207デフォルトの名無しさん
2010/12/18(土) 13:02:570208デフォルトの名無しさん
2010/12/18(土) 13:27:07で、>>204の通りだろ
呼び出し制限に影響されないというのが差異で、単なるメソッド呼び出し
本来は、private メソッドを無理矢理使うときー、みたいな限定用途ではない
0209デフォルトの名無しさん
2010/12/18(土) 13:31:52別にアクセス制限は関係ない。
0210デフォルトの名無しさん
2010/12/18(土) 13:56:04privateメソッドにアクセスする用途で使ったのなんて
モンキーパッチで仕方なく書いた1回だけだ
0211デフォルトの名無しさん
2010/12/18(土) 16:56:310212デフォルトの名無しさん
2010/12/18(土) 16:59:33と
privateメソッドを呼ぶ
の違いが初心者の私にはわかりません。
前者はほかに何ができることを言っているのでしょうか?
0213デフォルトの名無しさん
2010/12/18(土) 17:17:57privateメソッドを呼ぶ
と
動的プログラミング
というくくりで考えればいい。
上二つの違いは、何が目的なのかという解釈の違い。
二つのくくりの違いは、もう何もかも違うだろ。
0214デフォルトの名無しさん
2010/12/18(土) 18:27:11class C
def foo; puts "foo"; end
def bar; puts "bar"; end
def baz; puts "baz"; end
def main(arr)
arr.each do |name|
__send__(name)
end
end
end
C.new.main(['foo', 'baz', 'foo'])
・ 「なんかスゴいからこれどっかで使おう!」とか考えない
・ 手段のために目的探したりしない、乱用厳禁
・ どうしても困ったときにはたぶんあなたの前に現れてくれるサンタさん
0215デフォルトの名無しさん
2010/12/18(土) 19:34:57説明&例をあげていただいて感謝
0216デフォルトの名無しさん
2010/12/18(土) 23:30:23へーー。わかりやすい。
0217デフォルトの名無しさん
2010/12/19(日) 08:46:40def foo; puts "foo2"; end
def bar; puts "bar2"; end
def baz; puts "baz2"; end
def main(arr)
arr.each do |name|
__send__(name)
end
end
end
C.new.main(['foo', 'baz', 'foo'])
引数から直接関数を呼ぶって危険じゃないの?
これがrubyスタイル?
0218デフォルトの名無しさん
2010/12/19(日) 09:32:08・ 手段のために目的探したりしない、乱用厳禁
・ どうしても困ったときにはたぶんあなたの前に現れてくれるサンタさん
って書いてあるじゃん。もう少し考えてから書こうよ。いくら2chと言ってもさ。
0219デフォルトの名無しさん
2010/12/19(日) 09:40:180220デフォルトの名無しさん
2010/12/19(日) 11:02:37そんくらいで危険とか言われてもピンと来ないな
0221デフォルトの名無しさん
2010/12/19(日) 11:15:13まあそんなもんだと思う
__send__ に渡す引数が信用ならないなら自前でなんとかしてくれ
0222デフォルトの名無しさん
2010/12/19(日) 15:57:13>Rubyは開発者のことを信頼しているっていう思想が根源にあるから
C みたいな言い分ですね
0223デフォルトの名無しさん
2010/12/19(日) 17:41:09ttp://regional.rubykaigi.org/sapporo03
これにMatzの発表資料と動画がないんだけど、公開されないのかな。
秘守契約とかあんの?
0224デフォルトの名無しさん
2010/12/19(日) 17:59:45matzはCプログラマ
0225デフォルトの名無しさん
2010/12/19(日) 20:26:11b.rbというソースがあるとき
irb起動して
require './b'
(ruby1.92)
とソースを読ませてから
色々なことをするの?
参考url
オブジェクトの中身が知りたーい - takkan_mのNo planな日常
http://d.hatena.ne.jp/takkan_m/20101213/1292247476
0226デフォルトの名無しさん
2010/12/19(日) 20:45:100227デフォルトの名無しさん
2010/12/19(日) 20:53:28a = Object.new
b = Object.new
p a == b #=> false
a = Array.new
b = Array.new
p a == b #=> true
0228デフォルトの名無しさん
2010/12/19(日) 20:59:000229デフォルトの名無しさん
2010/12/19(日) 21:15:09Oh.. Cを読まないとダメですか 自分にはまだちょっと早そうですね〜
リファレンスの文章で我慢します
レスありがとうございました
0230デフォルトの名無しさん
2010/12/19(日) 21:15:25ちょっと見たいだけなら、↓から覗くって手もあるよ。
http://rubydoc.info/stdlib/core/1.9.2/frames
0231227
2010/12/19(日) 21:23:50おお、これはわかりやすいですね!
これなら自分でもObject#==とArray#==のCコードを見ることができました
Object#==のほうは短いのでなんとなくわかりますが、Arrayのほうはよくわからずw でも実装が違うってことはわかりました
参考になるサイトを教えていただきありがとうございました
0232デフォルトの名無しさん
2010/12/20(月) 00:34:51rb_define_methodとかあるから、そこでRubyレベルのメソッド名を探す
と、対応するCの関数が分かる。
0233デフォルトの名無しさん
2010/12/20(月) 01:14:22Ruby 初心者スレッド Part 26
http://pc11.2ch.net/test/read.cgi/tech/1235727504/
Ruby 初心者スレッド Part 25
http://pc11.2ch.net/test/read.cgi/tech/1233369067/
Ruby 初心者スレッド Part 24
http://pc11.2ch.net/test/read.cgi/tech/1230783202/
Ruby 初心者スレッド Part 23
http://pc11.2ch.net/test/read.cgi/tech/1227123021/
Ruby 初心者スレッド Part 22
http://pc11.2ch.net/test/read.cgi/tech/1221467121/
Ruby 初心者スレッド Part 21
http://pc11.2ch.net/test/read.cgi/tech/1217952441/
Ruby 初心者スレッド Part 20
http://pc11.2ch.net/test/read.cgi/tech/1214498119/
Ruby 初心者スレッド Part 19
http://pc11.2ch.net/test/read.cgi/tech/1208100393/
Ruby 初心者スレッド Part 18
http://pc11.2ch.net/test/read.cgi/tech/1203658291/
Ruby 初心者スレッド Part 17
http://pc11.2ch.net/test/read.cgi/tech/1200472887/
Ruby 初心者スレッド Part 16
http://pc11.2ch.net/test/read.cgi/tech/1197120980/
Ruby 初心者スレッド Part 15
http://pc11.2ch.net/test/read.cgi/tech/1193298175/
Ruby初心者スレッド Part 14
http://pc11.2ch.net/test/read.cgi/tech/1188014743/
0234デフォルトの名無しさん
2010/12/20(月) 01:14:37http://pc11.2ch.net/test/read.cgi/tech/1183115034/
Ruby初心者スレッド Part 12
http://pc11.2ch.net/test/read.cgi/tech/1178167650/
Ruby初心者スレッド Part 11
http://pc11.2ch.net/test/read.cgi/tech/1174607679/
Ruby初心者スレッド Part 10
http://pc11.2ch.net/test/read.cgi/tech/1169542763/
Ruby初學者スレッド Part 9
http://pc10.2ch.net/test/read.cgi/tech/1164065622/
Ruby初心者スレッドPart8
http://pc8.2ch.net/test/read.cgi/tech/1159424939/
Ruby初心者スレッドPart7
http://pc8.2ch.net/test/read.cgi/tech/1154077799/
Ruby初心者スレッドPart6
http://pc8.2ch.net/test/read.cgi/tech/1147918197/
Ruby初心者スレッドPart5
http://pc8.2ch.net/test/read.cgi/tech/1143403165/
Ruby初心者スレッドPart4
http://pc8.2ch.net/test/read.cgi/tech/1137927749/
Ruby初心者質問スレPart3
http://pc8.2ch.net/test/read.cgi/tech/1125587131/
Ruby初心者質問スレPart2
http://pc8.2ch.net/test/read.cgi/tech/1107799347/
Ruby初心者質問スレPart1
http://pc5.2ch.net/test/read.cgi/tech/1100534824/
0235デフォルトの名無しさん
2010/12/20(月) 10:20:59まるで普及してない・・・
0236デフォルトの名無しさん
2010/12/20(月) 10:26:45普及は 1.9.1 から数えてくれ
ttp://www.ruby-lang.org/ja/news/2009/01/30/ruby-1-9-1-released/
来年の1月30日で2歳だ
0237デフォルトの名無しさん
2010/12/20(月) 10:30:33あ、そうなんだ
無知でスマソ
0238デフォルトの名無しさん
2010/12/20(月) 10:32:550239デフォルトの名無しさん
2010/12/20(月) 10:41:211.9 系列の開発版は常に1.9.0を名乗り、バージョンが「上がる」ことはない
1.9 系列の安定版は 1.9.1、1.9.2、1.9.3、… 1.9.10、1.9.11、…を名乗る
1.8 系列の開発版は…あるんだっけ? まあいいや、1.8.7 の次の安定版は、あるとしたら 1.8.8 だ
2.0 が安易に出ることはしばらくない
1.9 の安定版でもう何も足すことも引くこともないというような安定っぷりになったら、
それがそのまま2.0にスライドすると予測されてる
0240デフォルトの名無しさん
2010/12/20(月) 11:00:00・ それはRubyの書き方のミスです
・ それはRubyの使い方がまずいです
・ それはgemライブラリ側の不具合です
・ それはgemライブラリが1.9.1に対応してないからです
・ それはあなたの文字エンコーディングの扱い方のミスです
が渾然一体となってジェットストリームアタックかけてくるからだな
1.8.7でRubyに慣れてからだと
> それはRubyの書き方のミスです
> それはRubyの使い方がまずいです
が激減して
> それはgemライブラリが1.9.1に対応してないからです
の自力バイパスが可能で
> それはgemライブラリ側の不具合です
を自力修復可能(なことがある)なので、残りの
> それはあなたの文字エンコーディングの扱い方のミスです
とせいぜい
・ それは1.9.1/1.9.2の新機能です
くらいで悩む程度になって気楽
0241デフォルトの名無しさん
2010/12/20(月) 11:08:040242デフォルトの名無しさん
2010/12/20(月) 11:12:31わりとピキッと来ることが多いはずなんだけど
0243デフォルトの名無しさん
2010/12/20(月) 11:18:24例えばどんなgemか3つ4つ挙げてみてよ
0244デフォルトの名無しさん
2010/12/20(月) 12:02:01文字エンコーディングが変なのは時々ひっかかるけど
0245デフォルトの名無しさん
2010/12/20(月) 12:20:320246デフォルトの名無しさん
2010/12/20(月) 12:26:330247デフォルトの名無しさん
2010/12/20(月) 12:32:00# -*- encoding: UTF-8 -*-
require 'rubygems'
require 'active_support'
require 'date'
p Date::today
p Date::today.last_month
このスクリプトで,test.rb:10: undefined method `last_month' for #<Date: 4911101/2,0,2299161> (NoMethodError)
のエラーが出てしまいます。
対処法知ってますか?
環境は,intel iMac 10.6.5
ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]
ruby 1.8.6 (2009-06-08 patchlevel 369) [universal-darwin9.0]のppc miniでは問題なかったのですが。
0248デフォルトの名無しさん
2010/12/20(月) 13:24:57last_monthのかわりにprev_monthを使用すべし。
0249デフォルトの名無しさん
2010/12/20(月) 14:11:42rubyのバージョンの数字が2桁にならない保証ってもう過去の話?
0250デフォルトの名無しさん
2010/12/20(月) 17:39:07amazon-ecs(+Hprocit)で >>240 みたいな目にあった
0251デフォルトの名無しさん
2010/12/20(月) 20:03:32def << name, price
puts "#{name}=#{price}"
end
end
foo = Foo.new
foo << "smile", 100
エラーが出ます。なぜですか?
./main.rb:10: syntax error, unexpected ',', expecting $end
0252デフォルトの名無しさん
2010/12/20(月) 20:20:37foo << ["smile", 100]
foo.<< "smile", 100
という書き方をするメソッド定義はわかるのですが、
foo << "smile", 100
という書き方をするためのメソッド定義が分かりません。
0253デフォルトの名無しさん
2010/12/20(月) 20:27:270254251
2010/12/20(月) 21:06:25メニューに"smile"、100円を足す正しいメソッドは
mac.menu << "smile", 100
だと思うのですが、どう考えてもこの表記では書けません。
0255デフォルトの名無しさん
2010/12/20(月) 21:16:540256デフォルトの名無しさん
2010/12/20(月) 21:57:37知らなかった
0257デフォルトの名無しさん
2010/12/21(火) 00:16:43menu :mac do
item 'smile', 100
item 'potato', 50
end
とか書いてしまいそうだ。
0258デフォルトの名無しさん
2010/12/21(火) 03:24:25aryだけを配列としたいのですが、昔はPGResult.resultっていうのがあったみたいなんですが
今はないみたいで PGResult.each do ふにゃらら endでやっているのですが、
これで正しいのでしょうか? なにか釈然としません。
0259デフォルトの名無しさん
2010/12/21(火) 03:32:43ふが
ふが
0260デフォルトの名無しさん
2010/12/21(火) 06:26:53すでに回答があるように、言語使用上不可能。演算子はそういうもんだと思ってくれ。
回避策は、気に入ってもらえるかわかんないけど
mac.menu << "smile", 100
ではななくて
mac.menu "smile", 100
にするくらいしかない。
def menu(name=nil, price=nil)
# 引数が指定されていれば追加する
@menu << [name, price] unless name.nil? # メニューを返す
@menu
end
または
def menu(*args)
# 引数が指定されていれば追加する
@menu << args unless args.empty?
# メニューを返す
@menu
end
0261デフォルトの名無しさん
2010/12/21(火) 09:14:31よくRuby(Rails)が使用されている代表的なWebサービスとして、
Twitterが挙げられますが、以前はすべてRubyで書かれていたけど、
最近はフロントエンドがRubyで、バックエンドがScalaだと聞きます。
この場合のフロントエンド、バックエンドというのはどの部分を指すのでしょうか?
素人考えにはフロントエンドがUI、バックエンドがDBかなぁとか想像してますが、
そんな分け方するのかな?と疑問に思いました
0262247
2010/12/21(火) 11:43:51ありがとうございます。おっしゃるとおり,Rails3が入ってます。
gem list -l
actionmailer (3.0.1, 2.3.5, 1.3.6)
actionpack (3.0.1, 2.3.5, 1.13.6)
actionwebservice (1.2.6)
activemodel (3.0.1)
activerecord (3.0.1, 2.3.5, 1.15.6)
activeresource (3.0.1, 2.3.5)
activesupport (3.0.1, 3.0.0, 2.3.5, 1.4.4)
rails (3.0.1, 2.3.5, 1.2.6)
ただp Date::today.prev_monthと変更しても,
undefined method `prev_month' for #<Date: 4911103/2,0,2299161> (NoMethodError)
になります。
パッチレベルが低いからでしょうか?
システムデフォルトのとは別にrubyをインスコすべきか,悩みます。
とりあえず,お礼とご報告まで。
0263デフォルトの名無しさん
2010/12/21(火) 12:47:16rvm入れてgem環境分けておけばいいよ
Rails3が原因なら外しておける
0264デフォルトの名無しさん
2010/12/21(火) 14:04:33使っているActiveSupportのバージョンに応じてprevとlast使い分けて
くだされ。
2.3.8 は移行を意図しているので両方あるはずだけど。
0265デフォルトの名無しさん
2010/12/21(火) 17:15:46公式リファレンスのEnumerable#max {|a, b| ... }の説明でめちゃくちゃ混乱してるんだ
なぜブロックのパラメータはふたつ?とか
「ブロックの値は〜期待してます。」の意味とか
全然理解できない
誰か使い方を教えてください
0266デフォルトの名無しさん
2010/12/21(火) 17:23:55foo.max は
foo.max{|a,b|a<=>b} と同じ
比較のための値の計算の方法じゃなくて、大小比較の方法をブロックで外付けしてやるわけ。
0267デフォルトの名無しさん
2010/12/21(火) 17:34:061. 数値の配列を sort メソッドを使わずに自力でソートするプログラムを書く
2. 1 を拡張して任意のオブジェクトの配列をソートするプログラムを書く
ここらへんまでやれば、たとえ 1 と 2 がうまく書けなかったとしても
max やら sort みたいに比較関数を渡すメソッドの使い方ぐらいは理解できるはず
0269デフォルトの名無しさん
2010/12/21(火) 21:01:210270デフォルトの名無しさん
2010/12/21(火) 21:44:18Rubyに絡めてくれれば乗る人もいたんだろうけど…
0271デフォルトの名無しさん
2010/12/21(火) 21:51:19そうですかー
>>261が理解出来たら、じゃあなんでRubyじゃダメだったのか、単に速度が遅かったからか、大量のつぶやきをさばけなかったのか、もしくは動的型によるリファクタのしづらさとか、それとももっと違う原因なのか、という部分も知りたいと思ってました
ここじゃスレ違いだとすると、どこで聞くのが適切でしょうか?
0272デフォルトの名無しさん
2010/12/21(火) 21:52:14DBやファイルや他のデーモン・サービスと連携する部分がバック
だと思えばいいんじゃないかね。
0273デフォルトの名無しさん
2010/12/21(火) 22:13:27これは単純に(ある程度の)足し算というレベルで高い
ごっつい処理をたくさんの人に提供、とかいうのだと、最終的にPHPのほうが最低2倍は捌ける人数多いと思う
でも、それでもRubyを使う人がいる
この世のあらゆるプログラムをCで記述しないのと同じような理屈
Rubyで初期開発して、処理負荷が間に合わなくなったら他の言語に移る、というのは
Ruby的にはまったく悲しむべき問題ですらない
むしろRubyの優位性を示す出来事であるとすら思う人が多いはず
公開プロダクトを最初から最後までRubyで運用し倒しましたとかいうのは
その人がお金持ちか基地外か過疎プロダクトかどれか
0274デフォルトの名無しさん
2010/12/21(火) 23:04:46matzはtwitterがscalaを採用したことを、負けたと思ってるみたいだけどな
0275デフォルトの名無しさん
2010/12/21(火) 23:52:110276デフォルトの名無しさん
2010/12/22(水) 01:13:36特に作者としては自然なことだと思うが
0277デフォルトの名無しさん
2010/12/22(水) 08:07:10Net::HTTP.Proxy メソッドは、
Net::HTTP を継承したクラスを作成して、
作成した クラスを返します。
Ruby は非常に柔軟な言語であるため、
メソッド中に動的にクラスを作成して、
そのクラスを返すということが可能です。
このメソッドの中にクラスって意味がわかりません。
普通、クラスを作ってその中にメソッドを定義するのではないですか?
0278デフォルトの名無しさん
2010/12/22(水) 08:11:08Windowsで下記のプログラムを-Eを付けて実行するとEncoding::UndefinedConversionErrorが
発生します。どのように修正すべきか教えていただけませんか
# coding: utf-8
require 'pstore'
db = PStore.new("pstest")
str = "あいうえお"
db.transaction{ db[1] = str }
db.transaction{ puts db[1] }
C:\home\mechanize>ruby -v
ruby 1.9.1p429 (2010-07-02 revision 28523) [i386-mswin32]
C:\home\mechanize>ruby -Ecp932:utf-8 hoge.rb
C:/PROGRA~1/RUBY-1~1.1/lib/ruby/1.9.1/pstore.rb:499:in `write': "\xE3" from ASCII-8BIT to UTF-8
in conversion from ASCII-8BIT to Windows-31J (Encoding::UndefinedConversionError)
from C:/PROGRA~1/RUBY-1~1.1/lib/ruby/1.9.1/pstore.rb:499:in `save_data_with_fast_strategy'
from C:/PROGRA~1/RUBY-1~1.1/lib/ruby/1.9.1/pstore.rb:473:in `save_data'
from C:/PROGRA~1/RUBY-1~1.1/lib/ruby/1.9.1/pstore.rb:335:in `block in transaction'
from C:/PROGRA~1/RUBY-1~1.1/lib/ruby/1.9.1/pstore.rb:361:in `synchronize'
from C:/PROGRA~1/RUBY-1~1.1/lib/ruby/1.9.1/pstore.rb:321:in `transaction'
from hoge.rb:5:in `<main>'
0279デフォルトの名無しさん
2010/12/22(水) 08:55:56…これどうしよう
>>277
たいしたことしてない
Net::HTTP.Proxy メソッドの定義見るとわかるが、ClassクラスのオブジェクトをClass.newで作って、
それにmodule_evalでクラスインスタンス変数の定義書いて、そのClassオブジェクトを返すようにしてる
klass = Class.new
klass.module_eval{
attr_reader :name
def initialize
@name='A'
end
}
p klass.new.name #=> 'A'
ぶっちゃけこんなマニュアルの中でこんな宣伝する必要なんてないと思うけどね
1.9時代においては削除されるべき無用で紛らわしい雑談だと思うよ、個人的には
0280デフォルトの名無しさん
2010/12/22(水) 09:11:16マニュアルじゃなくて雑誌記事でわ?
0281デフォルトの名無しさん
2010/12/22(水) 09:13:01当たり前だが
# coding: utf-8
require 'pstore'
db = PStore.new("pstest")
str = "あいうえお"
@evacuated_encoding_for_pstore = Encoding.default_external
Encoding.default_external = Encoding::ASCII_8BIT
db.transaction{ db[1] = str }
db.transaction{ puts db[1] }
Encoding.default_external = @evacuated_encoding_for_pstore
puts してるのは UTF-8 エンコーディングの UTF-8 バイナリ列のままだから
コマンドプロンプトでは化けるので注意
0282デフォルトの名無しさん
2010/12/22(水) 09:28:50ありがとうございました。
リファレンスちゃんと理解できるよう出直します。
私のところでは、化けずに出力されてます。
0283デフォルトの名無しさん
2010/12/22(水) 09:33:59ユーザー側にあんまり非はないし、この対処をマニュアルから読み取るのは不可能なんじゃないかな
0284デフォルトの名無しさん
2010/12/22(水) 10:19:08言語のユーザーや仕事の開発者としては、Ruby向いてないところに差し迫ったら乗り換えて当然と思ってしまうけど
Matzは立場上(本気でそう思ってなくても)悔しがらないとあかんのでは?w
0285デフォルトの名無しさん
2010/12/22(水) 10:44:23>メソッド中に動的にクラスを作成して、
>そのクラスを返すということが可能です。
>
>このメソッドの中にクラスって意味がわかりません。
メソッドの中でクラスを作成し、それを返す。ただそれだけ。
これはもとのマニュアルが悪いな。「動的に」なんて初心者にわかるはずがない。
直すなら
「メソッドの中でクラスを作成して返します」
「メソッドを実行するたびにクラスを作成して返すことができます」
とか。
0286デフォルトの名無しさん
2010/12/22(水) 11:18:44それは単に表面的なスタイルの問題じゃないの?
インデント強制だからPython は嫌だとか言ってる人たちを思い出すな
0287デフォルトの名無しさん
2010/12/22(水) 11:20:24アンカーミスだよな?
0289デフォルトの名無しさん
2010/12/22(水) 12:22:120290デフォルトの名無しさん
2010/12/22(水) 12:27:250291デフォルトの名無しさん
2010/12/22(水) 15:23:46jrubyで文字コード変換するなということなんだろうか
0292デフォルトの名無しさん
2010/12/22(水) 16:21:18もうJava標準APIを呼んでしまえ。
String#getBytesとかエンコード指定付きコンストラクタとか
Reader/Writerとか。
0293デフォルトの名無しさん
2010/12/22(水) 19:09:44>matzはtwitterがscalaを採用したことを、負けたと思ってるみたいだけどな
うそだぁ
ソースは?
0294デフォルトの名無しさん
2010/12/23(木) 07:23:26そんなことはない
現在のJRubyの動作は基本的に完全だと外人さんも太鼓判を押している
0295デフォルトの名無しさん
2010/12/23(木) 07:46:49まあNKF.guess組み込んで「エンコーディング対応しました」とか言う日本人もいるからどっちもどっちだが
案の定ISO-8859-xで盛大に誤爆して現在もコードまだ直ってない
君のことだよMechanize
0296デフォルトの名無しさん
2010/12/23(木) 09:55:16nkfみたいな文脈で外人の太鼓判は信用できないwww
0297デフォルトの名無しさん
2010/12/23(木) 11:55:09たとえば、
rubyでhtmlタグを文字列から除去する方法(正規表現) - YomuKaku Memo
http://memo.yomukaku.net/entries/51
のstrip_tagsメソッド
irbではエラー
str= open("http://railstutorial.org/ruby-on-rails-tutorial-book")
p strip_tags str
0298デフォルトの名無しさん
2010/12/23(木) 12:18:43いろいろ依存しているライブラリがあるので、
require 'erb'
require 'active_support/dependencies/autoload'
require 'active_support/core_ext/class/attribute_accessors'
require 'active_support/core_ext/string/encoding'
require 'active_support/concern'
# 面倒&初期化の重さを厭わないなら require 'active_support/all'
require 'action_view/helpers/capture_helper'
require 'action_view/helpers/sanitize_helper'
必要ならさらに include ActionView::Helpers::SanitizeHelper
0299デフォルトの名無しさん
2010/12/23(木) 12:36:440300デフォルトの名無しさん
2010/12/23(木) 12:41:22適当にアプリ作る。
そこで
rails console
でrailsがバックにあるirbが使える
0301デフォルトの名無しさん
2010/12/23(木) 13:59:31includeされるわけじゃない(本来ビューレンダリング用のものだし)ので、
そこは必要。
ただし、helper というビューオブジェクトが存在するので、include
しなくても
helper.strip_tags('...')
とは出来る。
0302デフォルトの名無しさん
2010/12/23(木) 14:20:31日本語のまとまった情報とか無いですよね・・・
0303デフォルトの名無しさん
2010/12/23(木) 15:24:50分かるので、あとはそれを使う環境を整えるために試行錯誤するだけ。
0304デフォルトの名無しさん
2010/12/24(金) 01:21:41まあ、Railsも使っててRuby本体にも造詣のある人は少なくないだろうし
わかるんじゃないかなあと思う
RailsのことはRailsスレでやれバーカバーカというよりは、単に遭遇確率の問題
0305デフォルトの名無しさん
2010/12/24(金) 13:21:04足りないメソッドあるし使えないから面倒くさい
rails consoleのhelperから使った方がいいな
前はrails consoleから簡単に使えないメソッドもあったし(確かcontrolに依存していたり、内部で擬似的にリクエスト発生が必要だったり?)
そういうのは徐々に改善されていっているようだけど
0306デフォルトの名無しさん
2010/12/25(土) 00:35:43インストール。
$ gem install rcodetools
0307デフォルトの名無しさん
2010/12/25(土) 11:38:05[ruby-list:47063] Ruby逆引きハンドブック & xmpfilter (was: Re
http://permalink.gmane.org/gmane.comp.lang.ruby.japanese/6175
これか、よくブログでコードに
1 + 2 # => 2
と表示されるのってxmpfilterなのか
エディタのサポートあれば便利だな
0308デフォルトの名無しさん
2010/12/25(土) 11:49:390309デフォルトの名無しさん
2010/12/25(土) 14:46:17ふとバイナリモードにしてみたところ、これまで30秒程かかっていた読み込みが
1秒足らずで終わりました。後から強制エンコーディングするにもおつりが出る速さです。
なぜこんなにテキストモードのI/Oは遅いのでしょうか?
0310デフォルトの名無しさん
2010/12/25(土) 14:55:35知らないよ
0311デフォルトの名無しさん
2010/12/25(土) 15:06:57そりゃ1バイトずつ内容チェックしていって
CR LF の並びがあれば "\n" に変換するという「無駄」な処理があるからに決まってるじゃん
変換がないだけならただ読んで終了だもの
0312デフォルトの名無しさん
2010/12/25(土) 15:12:05テキストモードで「改行コードを置換する」だけの処理がメインの処理よりも時間がかかるなんてことがあるのだろうか!
0313デフォルトの名無しさん
2010/12/25(土) 16:29:23フールセーフ(アフォでも安全)というか、
自動判別させる処理とか裏で動いているから、
0314デフォルトの名無しさん
2010/12/25(土) 16:30:35File.open("sentence.txt").each{|line| ...
0315デフォルトの名無しさん
2010/12/25(土) 16:46:34openにその変数を指定するとかではなく?
0316デフォルトの名無しさん
2010/12/25(土) 16:55:22そういう一手間がいるんですね。
C:\>xxx.rb xxx.txt > xxx1.txt
みたいなわけにはいかないのでしょうか?他の言語かじったときのイメージでこんな
かんじでいけなるのかと勝手に思ってたのですが。
ぐぐってもでてこないのだから、ダメなんでしょうね。
0317デフォルトの名無しさん
2010/12/25(土) 16:59:09ちなみにCSVファイルの加工です。
0318デフォルトの名無しさん
2010/12/25(土) 17:04:40スクリプト起動時の引数に指定してそれを利用するパターン(推奨)
inputed = ARGV[0]
file = open(inputed, 'rb'){|f| f.readlines}
puts "#{inputed} has #{file.size} lines"
実行:
$ ruby hoge.rb sentence1.txt
$ ruby hoge.rb sentence2.txt
スクリプトを起動して対話的に指定するパターン(一見凄いが後々意外とめんどい)
puts 'ENTER FILEPATH: '
inputed = $stdin.gets.chomp
file = open(inputed){|f| f.readlines}
puts "#{inputed} has #{file.size} lines"
実行:
$ ruby hoge.rb
ENTER FILEPATH: ← ここでキーボードからファイルパス入力してenter
ちなみにこの file.size は実際の行数を必ずしも反映してない
あと、ユーザーの入力が信用できない場合openにそのまま渡してはいけない
0319デフォルトの名無しさん
2010/12/25(土) 17:05:37それは出力だろ
出力ファイルの名前のことなのか
君のレスは情報の多くが欠落している
欠落した情報でググっても何も出てくるはずもない
0320デフォルトの名無しさん
2010/12/25(土) 17:06:51普通に書けば、
while line = gets
puts(line)
end
組み込み変数で明示的に書けば、
while line = $stdin.gets
$stdout.puts(line)
end
ドヤ顔したければ、
while gets; puts $_; end
0321デフォルトの名無しさん
2010/12/25(土) 17:08:09初心者スレに初心者がレスすると不幸を生むから見てるだけのほうがいい。
0322デフォルトの名無しさん
2010/12/25(土) 17:12:30Rubyの標準入力はIOオブジェクトとしてグローバル変数$stdinからアクセス可能
Rubyの標準出力はIOオブジェクトとしてグローバル変数$stdoutからアクセス可能
puts や print のデフォルト出力先は $stdout
スクリプト起動時の引数はARGV
「起動時引数をファイルとみなして開いたIOオブジェクトとみなすが、空の場合は標準入力に切り替える」のはARGF
…ていうか、標準入力や標準出力、起動時の引数を知ってればこれにたどり着くだろうから、
もしかして「コンソール」という言葉を知ってて呼び名を知らないんか
0323デフォルトの名無しさん
2010/12/25(土) 17:13:37とりあえずopenで開く人が多くて、なんだかなぁって感じがする。
普通は標準入出力使ってフィルタを作るだろ…言わなくてもそうなるだろ…?
どうしてopenつかうんだよもぉぉぉぉぉ!
0324デフォルトの名無しさん
2010/12/25(土) 17:15:08open して read する
対象のファイルの名前
を"コンソール"から指定したいのだろ
0325デフォルトの名無しさん
2010/12/25(土) 17:16:27なんなんだよ!1行ずつ読み込んで1行ずつ処理しろよぉ!
そうしたほうが省メモリだろぅ!
「でもメモリいっぱいあるし」
まぁそうだけどさぁ…><;
メリークリスマス!
0326デフォルトの名無しさん
2010/12/25(土) 17:18:580327デフォルトの名無しさん
2010/12/25(土) 17:19:24File.open("sentence.txt").each{|line|
# ここで読み込んだ内容を別途ファイルに保存したいが、
# 書き方がわからないので空欄にして質問しました
}
という質問の可能性を排除するような視野の狭い人は初心者スレで回答すべきではない
そもそも読み込み対象のファイル名は既に記載されてるではないか
なんでそれをユーザー入力させると誤読するのかマジ理解不能
0328デフォルトの名無しさん
2010/12/25(土) 17:22:010329デフォルトの名無しさん
2010/12/25(土) 17:22:030330デフォルトの名無しさん
2010/12/25(土) 17:23:55いくつもの可能性があるからいちいち聞きなおさにゃならん
記載されてるファイル名をベタ書きしたくないと普通は解釈する
0331デフォルトの名無しさん
2010/12/25(土) 17:24:59それは元質問の「スクリプトファイルにテキスト名を指定」で既に行われてるから
引数によるファイル名の指定をやりたくないという質問なのこれは
0332デフォルトの名無しさん
2010/12/25(土) 17:27:29テキスト名をコンソールで指定したい、だからファイル名を対話的に入力したいんだろ要は
>>318の後半でいいじゃん
0333デフォルトの名無しさん
2010/12/25(土) 17:30:220334デフォルトの名無しさん
2010/12/25(土) 17:30:39引数から入力したいならそういう風に言うはずだから、端末から入力する方法を答えればいい
とりあえずは gets でいいんじゃね
0335デフォルトの名無しさん
2010/12/25(土) 17:42:19ruby hoge.rb in.txt > out.txt
を
「ruby を hoge.rb と in.txt を引数にして起動し、標準入力のリダイレクトで out.txt に書き出す」
と読めてるかどうかでかなり説明レベルが違うような…
これなら「起動時の引数をrubyから取得する方法」と「標準出力
って、標準出力にはそれこそ普通に出力されててそれ以降はRubyの仕事じゃないじゃないですかやだー!
…引数を複数取ってrubyで利用する方法がわかればいいような気がする
ruby hoge.rb in.txt out.txt
と書いて in.txt を読み込んで out.txt に書き出す、ができれば満足されそうな
つまりはシェルのリダイレクトやらパイプやらを使用したくないんじゃないかと
>>316を読む限り、コンソールという概念を勘違いしてるという読みは正しいと思う
0336デフォルトの名無しさん
2010/12/25(土) 17:46:05>>316の「ほかの言語」はawkとかだと推測
0337デフォルトの名無しさん
2010/12/25(土) 17:53:53「○○を××して△△するプログラムを書こうとしてここまでできたのですが、
●●の部分を◇◇にする方法がわかりませんてめえら勝手に盛り上がってないでとっとと教えろカスが」
とか言ってくれると僥倖
たぶんこのへんのたいていのパターンはRubyで書けるし別に喧嘩してるわけでもないのでさくっと情報くれ
0338デフォルトの名無しさん
2010/12/25(土) 18:26:49一物の部分をギンギンにする方法がわかりませんてめえら勝手に盛り上がってないでとっとと教えろカスが
0339デフォルトの名無しさん
2010/12/25(土) 19:43:09つ http://www.flickr.com/photos/john_lam/1910968816/
0340デフォルトの名無しさん
2010/12/25(土) 21:14:27× フールセーフ(約2,580件)
○ フールプルーフ(耐馬鹿性, fool proof, 約5,120,000件)
○ フェイルセーフ(間違っても安心, fail safe, 約1,590,000件)
0341デフォルトの名無しさん
2010/12/25(土) 21:15:530342デフォルトの名無しさん
2010/12/25(土) 22:31:01前の行に戻りたいときはどうするの?例えば、GenBankの出力で
LOCUS AB248268 638 bp DNA linear PLN 21-AUG-2007
DEFINITION Asarum heterotropoides var. heterotropoides gene for ITS1, 5.8S
rRNA, ITS2, partial and complete sequence, specimen_voucher: H.
Yamaji 6170 (TUS).
ACCESSION AB248268
//
...
となってるときに
{'LOCUS' => 'AB248268', 'DEFINITION' => 'Asarum heterotropoides var. heterotropoides gene for ITS1, 5.8S
rRNA, ITS2, partial and complete sequence, specimen_voucher: H. Yamaji 6170 (TUS).', 'ACCESSION' => ...}
という感じのHashをつくりたいときに、1行ずつの処理でうまくやれるアルゴリズムはあるのでしょうか?
DEFINITIONが終わったときにどうしてもACCESSIONの行を再読み込みするようなアルゴリズムになっちゃうんです。
ちなみに、DEFINITIONのあとに ACCESSIONがくることは保証されていません。別のフィールド(大文字のみ)か、
レコード区切り(//)が期待されます。
0343デフォルトの名無しさん
2010/12/25(土) 22:39:56入力元となるデータが限定されており、そのサイズが十分に予想できてかつメモリに乗せてもかまわないのなら全て読み込んで処理すればいい。
0344デフォルトの名無しさん
2010/12/25(土) 22:46:16データ区切りまでバッファしてから処理すればいい
0345314,316
2010/12/25(土) 22:52:55>>335さんのが最も聞きたいことに近いように思います。コンソールというのも、
勘違いというか、読んだHPでそういう使い方をしていたようにおもったもので。
コマンドラインというのが正確なのでしょうか。
>>335さんのを利用させてもらいますと、
ruby hoge.rb in.txt out.txt
このin.txtという指定をコマンドラインでしたいのですが、その際のhoge.rbには
どう記述すればいいのでしょうか?今、下のような感じになってるわけですが、
"sentence.txt"という指定をファイルからはずして、コマンドラインから
好きなファイルを指定して実行したいのです。File.open()の()の中は
どうすればいいんでしょうか?それとも上の方で指摘されているような
記述じゃないと無理なのでしょうか?
File.open("sentence.txt").each{|line|
ary = []
line.chomp.split(/\s*\/\s*/).each{|item|
ary.push(item) }
略
0346デフォルトの名無しさん
2010/12/25(土) 22:55:41hoge.rbに
p ARGV
と書いて
ruby hoge.rb in.txt out.txt
と実行してみろ。
そしたら後は
ARGV
でググレ。
0347345
2010/12/25(土) 23:19:31コマンドラインに引数ですか。コンソールとかコマンドプロンプトとかファイルとかで
延々とググッてました。
0348342
2010/12/26(日) 09:03:38ありがとうございます。元のデータはせいぜい数MBなので、全部読んでもいいと思いますが、
区切りまでバッファするというのは考えてなかったので、それでやってみます。
0349デフォルトの名無しさん
2010/12/26(日) 22:05:550350デフォルトの名無しさん
2010/12/27(月) 01:05:14来年の漏れの目標はなぜか sed, awk の習得です
0351デフォルトの名無しさん
2010/12/27(月) 08:25:060352デフォルトの名無しさん
2010/12/27(月) 08:39:40グロ中尉
0353デフォルトの名無しさん
2010/12/27(月) 09:03:22http://www.mapee.jp/ruby/yield.html
class Array
def each_twice
i = 0 # => 0
while i < self.length
x = self[i] * 2 # => 0, 8, 10, 14, 18, 64
yield x # => nil, nil, nil, nil, nil, nil
i += 1 # => 1, 2, 3, 4, 5, 6
end
end
end
d_ary = [0, 4, 5, 7, 9, 32] # => [0, 4, 5, 7, 9, 32]
d_ary.each_twice do |x|
puts x # => nil, nil, nil, nil, nil, nil
end
いやーrubyすごいね、arryって基本的な上位のクラスだと思うのだけれども。
何か特殊な指定もしなくても
class Array
だけで関数追加できちゃうんだね。
0354デフォルトの名無しさん
2010/12/27(月) 09:32:29なんつーか素人から見ると、大事なところをこわしそうで怖いよねw
0355デフォルトの名無しさん
2010/12/27(月) 11:20:330356デフォルトの名無しさん
2010/12/27(月) 12:02:520357デフォルトの名無しさん
2010/12/27(月) 12:54:320358デフォルトの名無しさん
2010/12/27(月) 12:56:580359デフォルトの名無しさん
2010/12/27(月) 13:20:030360デフォルトの名無しさん
2010/12/27(月) 14:56:32自演ばっかりうっとおしい
0361デフォルトの名無しさん
2010/12/27(月) 15:18:32someday.upto(Date::today) do |val|
p val
end
だと,
Sun, 29 Aug 2010
Mon, 30 Aug 2010
...
Sun, 26 Dec 2010
Mon, 27 Dec 2010
のように,1日づつ出力されるのですが,
Sun, 29 Aug 2010
Wed, 29 Sep 2010
Fri, 29 Oct 2010
Mon, 29 Nov 2010
のように月ごとの応答日を列挙するようなupto的メソッドってありますか?
whileとかifとか条件文を使わずには無理でしょうか?
0362デフォルトの名無しさん
2010/12/27(月) 15:36:06> require 'activesupport'
=> true
> time = Time.mktime 2010, 8, 29
=> 2010-08-29 00:00:00 +0900
> time = time.months_since 1
=> 2010-09-29 00:00:00 +0900
> time = time.months_since 1
=> 2010-10-29 00:00:00 +0900
> time = time.months_since 1
=> 2010-11-29 00:00:00 +0900
> time = time.months_since 1
=> 2010-12-29 00:00:00 +0900
これではどう?
0363デフォルトの名無しさん
2010/12/27(月) 15:36:49とか。
0364361
2010/12/27(月) 16:50:29ありがとうございました。
>>363では若干問題が...
somedayが2010.8.25の場合は,本日を基準にすると,12.25が既に到来しているので,
5こ列挙されて最後が2010.12.25になってほしいのです。
逆に>>362だと2010.12.29はまだ到来していないので,列挙してほしくない。
いずれにしても,示唆に富んだアドバイスをありがとうございました。
(条件文無しでは無理そうですね。)
0365デフォルトの名無しさん
2010/12/27(月) 18:25:00そのようなイテレータを定義するのもありかもよ
条件文はイテレータ定義内に書いておき
メインの処理ではイテレータを使うとか
0366デフォルトの名無しさん
2010/12/27(月) 18:34:10# 1.9
someday.upto(Date.today).select {|d| d.day == someday.day }
# 1.9 or 1.8
(someday..Date.today).select {|d| d.day == someday.day }
あたりでOKなんだろうけど。
0367デフォルトの名無しさん
2010/12/27(月) 22:45:560368デフォルトの名無しさん
2010/12/27(月) 22:51:36途中でgem名を変更されるよりはマシだ
ActiveSupportは物凄く古いgemライブラリで、
これができた頃はまだgemライブラリの命名規則(規則というか、傾向)すらなかったのだ
ActiveSupport式の命名法(AaaBbbCcc→aaabbbccc)は aaa_bbb_ccc 式の淘汰圧に負けたのよ
0369デフォルトの名無しさん
2010/12/28(火) 10:42:090370デフォルトの名無しさん
2010/12/28(火) 19:37:12def mes
puts "mes!"
end
end
と、自作ではなく既存のライブラリで定義されてるmesメソッドを
includeやextendで「オブジェクトを汚染する」ことなく一発で利用することはできますか?
M.mes みたいに使えるといいんですけど
事前に module M; module_function :mes; end するというのは今回不可です
0371デフォルトの名無しさん
2010/12/28(火) 19:43:59Ruby1.8.6とかでどうすればいいのかは知らんw
0372デフォルトの名無しさん
2010/12/29(水) 01:00:39extconf.rbのオプションに--prefixを取らせたいのですが、どうやったら出来るでしょうか?
0373デフォルトの名無しさん
2010/12/29(水) 01:51:52デザインパターンのどれかをつかう。
0374デフォルトの名無しさん
2010/12/29(水) 06:18:06モジュールに定義されたメソッドを呼べないのはRubyの制限だ
0375デフォルトの名無しさん
2010/12/29(水) 06:41:140376デフォルトの名無しさん
2010/12/29(水) 08:00:120377デフォルトの名無しさん
2010/12/29(水) 08:39:45現在インストールされているRubyの環境を使う、
拡張ライブラリ生成用autoconfという感じではないだろうか。
インストールされているRubyとは異なる場所に拡張ライブラリ
を入れたいということ?
0378デフォルトの名無しさん
2010/12/29(水) 12:49:16では事前が駄目なら事後で
module M
def mes
puts "mes!"
end
end
module M; module_function :mes; end
M.mes
もしくは、
module N; extend M; module_function :mes; end
N.mes
0379デフォルトの名無しさん
2010/12/29(水) 12:49:570380デフォルトの名無しさん
2010/12/29(水) 13:27:45なかなか辛い制限だが、ありえないことでもない
一応>>371みたいなミニなオブジェクト作らざるを得ないというのが回答になるのかね
o = Object.new; o.extend(M); o.mes
汎用にはこうか
mes は __send__ とかでは呼べないんだな
0381デフォルトの名無しさん
2010/12/29(水) 18:38:14b = {bc => 15, bt => 20, bh => 1}
c = {cc => 13, cm => 304, ca12}
d = [a, b, c]
こういう風に配列に入ってるハッシュの中身をソートしながらaから順番に出力したいのですが、どうしたらいいでしょうか?
解答お願いします。
0382デフォルトの名無しさん
2010/12/29(水) 18:53:41というか例が無茶苦茶すぎ
0383デフォルトの名無しさん
2010/12/29(水) 18:55:40d.inject(&:merge).sort
出力は好きなように。
0384デフォルトの名無しさん
2010/12/29(水) 18:56:18ハッシュのvalueをソートして、keyとvalueを出力したいです
0385デフォルトの名無しさん
2010/12/29(水) 18:57:30ソート基準が不明なのはよろしくないな。
0386デフォルトの名無しさん
2010/12/29(水) 18:58:57昇順降順のどっちかわからんが必要ならreverseせい。
0387デフォルトの名無しさん
2010/12/29(水) 19:12:050388デフォルトの名無しさん
2010/12/29(水) 19:15:48ゴルファー御用達
他人に見せる説明や公開するコードでこれを使う人間は周りから避けやすくなるので便利
0389デフォルトの名無しさん
2010/12/29(水) 19:19:17irb > h1.sort_by{|pair| pair.last}
[["ac", 10], ["aa", 12], ["ab", 15]]
irb > h1.sort_by{|pair| pair.last}.each{|k,v| puts "#{k} => #{v}"}
ac => 10
aa => 12
ab => 15
irb>
0390デフォルトの名無しさん
2010/12/29(水) 19:20:19ありがとうございます
0391デフォルトの名無しさん
2010/12/29(水) 19:39:44ググってもHash#mergeしか見つからなかったorz
0392デフォルトの名無しさん
2010/12/29(水) 20:24:40つ Symbol#to_proc
知らないとググりにくいよねこれ。
0393デフォルトの名無しさん
2010/12/29(水) 21:41:38イディオム化して覚えているせいで、>>383にいたる経緯パッと説明できないんだが誰か頼む
こういうようなことを初心者向けに
Enumerable#inject の詳細と結合法則 - 今日調べたことまとめ
http://d.hatena.ne.jp/tks_period/20081207/p1
ruby-1.8.7-p302 > d.inject{|result, item| result.merge(item)}
↓
ruby-1.8.7-p302 > d.inject{|result, item| result.send(:merge, item)}
↓
(特にこの間)
↓
ruby-1.8.7-p302 > d.inject(&:merge.to_proc)
↓
ruby-1.8.7-p302 > d.inject(&:merge)
0394デフォルトの名無しさん
2010/12/29(水) 21:47:32あーそうかブロックか。
助かりました。
0395デフォルトの名無しさん
2010/12/29(水) 21:49:33Symbol#to_procでググって見つけたこれとかですかね?
ttp://d.hatena.ne.jp/keyesberry/20080917/p1
0396デフォルトの名無しさん
2010/12/29(水) 22:17:40そのページ自体はいいんだが、
> そうか暗黙の型変換だよ
> &を前置したからRubyは
> それが手続きオブジェクトであると期待したんだ
> でもその期待に反して&を伴っていたのはシンボルだったので
> そのオブジェクトに手続きオブジェクトへの変換を要求
> つまりto_procメソッドを自動で送信したんだ
ここが>>393の
> (特にこの間)
にあたるのだろうが説明出来ていない気がするw
0397デフォルトの名無しさん
2010/12/30(木) 10:12:49Proc.new { |obj, *args| obj.send(self, *args) }
end
0398デフォルトの名無しさん
2010/12/30(木) 10:15:121.9で直ったから別にいらないな>to_proc
0399デフォルトの名無しさん
2010/12/30(木) 13:15:52引数のように受け取った受け取り側のメソッドが
その受け取ったメソッド自身で、受け取ったブロックを実行する命令のことか。
0400デフォルトの名無しさん
2010/12/30(木) 13:35:020401デフォルトの名無しさん
2010/12/30(木) 15:59:10るびまんのリファレンスのSymbol#to_proc 読んでもわからんから、それ書いておいて欲しす
http://rurema.clear-code.com/1.8.7/method/Symbol/i/to_proc.html
http://rurema.clear-code.com/1.9.2/method/Symbol/i/to_proc.html
実装そのまま書くのアレなら、こんな感じに動作しますというような擬似コードでいいから
それとto_procの説明なのにto_procがないしこれも書くかリンク貼っといておいて欲しい
841 名前:デフォルトの名無しさん[sage] 投稿日:2010/12/30(木) 11:18:18
リファレンス嫁
http://www.ruby-lang.org/ja/man/html/_A5E1A5BDA5C3A5C9B8C6A4D3BDD0A4B7.html
> ruby 1.7 feature: version 1.7 では、to_proc メソッドを持つオブジェクトならば、`&' 修飾した引数として渡すことができます
> (デフォルトで Proc、Method オブジェクトは共に to_proc メソッドを持ちます)。to_proc はメソッド呼び出し時に実行され、
> Proc オブジェクトを返すことが期待されます。
scrAPIって1.9に対応してる?
0402デフォルトの名無しさん
2010/12/30(木) 16:00:24るびまんのリファンレンスってなんだw
0403デフォルトの名無しさん
2010/12/30(木) 17:25:290404デフォルトの名無しさん
2010/12/30(木) 20:43:04WindowsとLinuxってデフォルトの文字コードが違いますよね…?
そいで、ソースコードはUTF-8で書いて、OSを調べてkconvで適切な文字コードに変換して出力しないといけないんですけど、
putsのたびに文字コードを変換するの面倒ですよね?
そいで、String#to_sをオーバーライドして文字コード変換するようにしたらいっかなー?なんて思ったんですけど、
なんかほかにいいやり方ありますか?
0405デフォルトの名無しさん
2010/12/30(木) 20:59:290406デフォルトの名無しさん
2010/12/30(木) 21:50:46まず開発者に要望を出す
・ruby cygwinでLANG=ja_JP.UTF-8してUTF-8で使う
・出力、入力でCodePageに合わせて文字コードを変換
https://github.com/jugyo/termtter/blob/master/lib/termtter/system_extensions/windows.rb
この例ではprintとputsを置換してる
0407デフォルトの名無しさん
2010/12/30(木) 23:56:170408デフォルトの名無しさん
2010/12/31(金) 00:01:54どう混同しているの?
0409デフォルトの名無しさん
2010/12/31(金) 03:01:15継承させたい場合はクラス変数、
継承させたくない場合はクラスインスタンス変数
程度の認識で良いのかな?
あとはクラス変数はトップレベルのスコープから影響受けるとか。
他には何か違いがあるのでしょうか?
0410デフォルトの名無しさん
2010/12/31(金) 03:05:51誰かが自分のタイ焼きのアンコを食べたら、なぜかおまいのタイ焼きのアンコもなくなってもいいならクラス変数を使えばいい。
0411409
2010/12/31(金) 03:20:02他の言語(Javaとか)ではそれが通常の動作だと思います。
クラスインスタンス変数の場合、
同じクラスの異なるオブジェクトで共有することすら出来ないので
使い道があるのかさえ分かりません。
Javaでいうクラス変数の役割を期待する場合は、クセがあってもクラス変数を使わざるを得ないと思うのです。
私の頭が固いだけなのでしょうか。
0412デフォルトの名無しさん
2010/12/31(金) 03:24:080413409
2010/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:360415デフォルトの名無しさん
2010/12/31(金) 07:46:52>>410
0416デフォルトの名無しさん
2010/12/31(金) 08:04:49悪いけど、何を言いたいのかよく分かりません。
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まず「1つのクラスからはいくつもオブジェクトを生成できる」ということは解る?
組み込みのクラスで言えば、数値クラスとか文字列クラスとか、作れるオブジェクトが1つじゃ絶対困るよね。
そして、1つのクラス(仮にMyClassとしよう)から生成したオブジェクトがa,b,cと3つあるとする。
その際、a,b,cの間で異なる値を持つのがインスタンス変数。
逆に、クラス自体に値を持たせたい、同じクラスから生成したオブジェクト同士で共有させたい
という時に使うのがクラス変数。
たぶんこの使い分け自体はJavaでも同じだと思うから
使い慣れてるJavaで、もう一度OOPを勉強し直すと良いよ。
0420デフォルトの名無しさん
2010/12/31(金) 10:25:220421デフォルトの名無しさん
2010/12/31(金) 10:59:58馬鹿確定
0422デフォルトの名無しさん
2010/12/31(金) 11:03:23インスタンス変数とクラス変数の違いを答えるのか
0423デフォルトの名無しさん
2010/12/31(金) 11:38:22>>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すまん、本気で読み間違えたwww
0426デフォルトの名無しさん
2010/12/31(金) 14:30:37>>413の言うことは結構最もなことで、他言語の実装を理解してる人が初めて見れば相当キモイ。
変数宣言の要らない(できない)Rubyではクラス変数を実装するのが難しいからクラスインスタンス変数で誤魔化すしかない。
クラスも所詮ただのオブジェクトなので、クラスインスタンス変数を持った所で他のオブジェクトに影響を与えることは無い。
同じクラスオブジェクトに対するアクセサを各インスタンスが持っているだけ。
なので>>413に対する回答としては、
クラスインスタンス変数は確かに誤魔化しの機能だが、Rubyではそれしか方法が無いので仕方ない。
0427デフォルトの名無しさん
2010/12/31(金) 18:21:44以下の実行結果に問題を感じないのか?
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:211.9で直ったぞそれ
0429デフォルトの名無しさん
2010/12/31(金) 19:19:53検討中なんじゃなくて?おれの環境は1.9.2p0だよ
0430デフォルトの名無しさん
2010/12/31(金) 23:45:35該当コミットくれ
0431デフォルトの名無しさん
2010/12/31(金) 23:58:54それは助かるわ。1.9に移行する利用がまたひとつ増えた
コマンドプロンプトで 1.9.2-p0 mingw32
irb -U起動後、日本語含むファイル名があるディレクトリで
puts Dir["*"]で文字化けする
あれ?何が悪い?
0432デフォルトの名無しさん
2011/01/01(土) 03:02:520433sage
2011/01/01(土) 03:46:43だめだった・・・
# -*- 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:32when n < 0
when n < 10
when n < 50
when n < 100
else
end
というようなことをやりたいときにもっといい書き方がありそうな気がするんだけどまったくたどり着けない
誰か知らない?
0435デフォルトの名無しさん
2011/01/01(土) 22:08:59lesser_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:01Procを使うのは思いつかなかった
caseに式がついてるほうが好みだからこれはありがたい
0437デフォルトの名無しさん
2011/01/01(土) 23:27:250438デフォルトの名無しさん
2011/01/02(日) 00:31:250439デフォルトの名無しさん
2011/01/02(日) 00:54:03/ , 、ヽ
({{ o⌒o}})
彡<_●_>ミ
/ ヽ
|| ||
U U
ノ| /ヽ|
(_ノU U
0440デフォルトの名無しさん
2011/01/02(日) 01:26:180441デフォルトの名無しさん
2011/01/02(日) 07:40:520442デフォルトの名無しさん
2011/01/02(日) 10:05:15irb は -U オプションで default_external まで UTF-8 になるせいかな。
-Ecp932:utf-8 とかならいけるかも。
0443デフォルトの名無しさん
2011/01/02(日) 13:32:030444デフォルトの名無しさん
2011/01/02(日) 13:37:38趣味でRubyを使ってる人や、仕事で自分のツールとしてRubyを使っている人はログを検索するだけで十分だと思う。
0445デフォルトの名無しさん
2011/01/02(日) 18:42:150446デフォルトの名無しさん
2011/01/02(日) 20:00:420447デフォルトの名無しさん
2011/01/03(月) 00:23:251. インスタンスメソッド定義内に書かれた @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>クラスインスタンス変数の場合、
>同じクラスの異なるオブジェクトで共有することすら出来ないので
>使い道があるのかさえ分かりません。
>
そうかなあ。
・子クラスでも共有したい場合はクラス変数を使う
・子クラスとは共有したくない場合はクラスインスタンス変数を使う
でいいじゃん。
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:030451デフォルトの名無しさん
2011/01/03(月) 09:38:26ライブラリを使えればいいのか、
外部プログラムとして実行できればいいのか。
0452デフォルトの名無しさん
2011/01/03(月) 13:07:08attr_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:270454デフォルトの名無しさん
2011/01/03(月) 16:27:55BBSReader.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># 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じゃぁクラスも使用禁止だぞ。理由は簡単で(ry
0458デフォルトの名無しさん
2011/01/03(月) 17:24:290459デフォルトの名無しさん
2011/01/03(月) 17:25:340460デフォルトの名無しさん
2011/01/03(月) 17:26:27各所に余計な手間をばら撒いてまでクラス変数を禁止するメリットはないよね
0461デフォルトの名無しさん
2011/01/03(月) 17:27:34初心者だから言ってみるんだけどさ、
スコープ共有としても、
触らなければ関係ないんじゃ?
0462デフォルトの名無しさん
2011/01/03(月) 17:42:140463デフォルトの名無しさん
2011/01/03(月) 18:09:17継承はされるがスコープは共有しない。
しかしRubyでは
@継承してスコープまで共有する
A継承すらしない
のどちらかの方法でしか実装できない。
っていう認識で合ってるのかな?
このジレンマの末、1.8では@を取り、1.9ではAを取る選択をしたということ?
なぜか1.9でも継承されてるみたいだけど。
0464デフォルトの名無しさん
2011/01/03(月) 23:51:10ありがとう
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でいいたくて
0465455
2011/01/04(火) 00:34:03ごめん。
実は俺自身も初心者に産毛が生えた程度だからあまり偉そうに言えなかったりする。
でもRubyらしくってことならやっぱりboolはクエスチョンマークの付いたメソッドで得るものだと思う。
んで、セッタのメソッドを作るんじゃなくて、
def use_proxy
@use_proxy = true
end
def unuse_proxy
@use_proxy = false
end
みたいにする。
変数とメソッドの名前を今までの話を引き継いだものにしたから、このままじゃちょっと違和感あるけど。
attr_は極力使わないほうがいいはず。
0466デフォルトの名無しさん
2011/01/04(火) 08:57:380467デフォルトの名無しさん
2011/01/04(火) 12:39:491.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:44sprintf.c のrdocコメントに記載がある。
0469デフォルトの名無しさん
2011/01/04(火) 13:09:35すばやいレスありがとう!
確かにありますね。
これで、心置きなく使えます。
0470デフォルトの名無しさん
2011/01/04(火) 16:57:57何が悲しくて内部変数名と同名のメソッドを定義強制されなければならんのかと小一時間
確かにラクなのだが、他人様の前に出すようなクラスなのなら
使用する前にちょっと考えてみたほうがいいかも
0471デフォルトの名無しさん
2011/01/04(火) 17:16:50インスタンス変数と、読み書き以外何もしないセッタ・ゲッタを、ひととおり定義したい、
という時に、DRY的な理由から使うのがattr_*だと思う。初心者だろうが熟練者だろうが。
他人様の前に出すようなクラスなら、より抽象的にわかりやすくなるのだから、
積極的に使うべき。
0472デフォルトの名無しさん
2011/01/04(火) 17:18:36>>470は具体的にどうすればいいと思ってるんだよ
0473デフォルトの名無しさん
2011/01/04(火) 17:31:52本当にattr_を使わなければならないのかどうか考えろってことだろ
DRYもいいがカプセル化も重要
>>472
俺470じゃないけど>>465みたいなのじゃないかな?
少なくともインスタンス変数を外から直接操作できるなんて可能な限り避けるべき
0474デフォルトの名無しさん
2011/01/04(火) 18:01:13自分で勝手に宣言しておいて「強制」とか訳わからん
0475デフォルトの名無しさん
2011/01/04(火) 18:06:50>インスタンス変数と、読み書き以外何もしないセッタ・ゲッタを、ひととおり定義したい、
というのがそもそもよくないと言っているのか
0476デフォルトの名無しさん
2011/01/04(火) 18:12:28じゃあなんなん?と問われると今はちょっとそんな元気は無いので元気なかたに譲る。
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:110479デフォルトの名無しさん
2011/01/04(火) 18:23:27>>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:23attr_* が無為にガンガン使われまくってる現状を憂いてるのかもしれん
「インスタンス変数の操作はattr_系を使うほうがよい」みたいな思い込みみたいな
rdocがattr_を特別扱いしないだけで状況はかなり変わると思うんだがな
0481デフォルトの名無しさん
2011/01/04(火) 18:28:38>>479
あーそんなん
インスタンス変数名とメソッド名称をがっちり結び付けてるのが、なんかヤ
それが当たり前のように初心者に浸透してる感じなのが、更にイヤ
そういう attr_ で提供された微妙な名称のメソッドを使わざるを得ないときとか、もにょんする
0482デフォルトの名無しさん
2011/01/04(火) 18:33:46def 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:25class Point
attr_accessor :x, :y
end
こういう場合に使うものだと思うけど。
0484デフォルトの名無しさん
2011/01/04(火) 19:55:35目から鱗だな。確かに複数のsetterが関数で存在する必然性はない気がする。
これは面白い。
0485デフォルトの名無しさん
2011/01/04(火) 20:55:24そうかえ?
0486デフォルトの名無しさん
2011/01/04(火) 21:01:460487Perl忍者 ◆M5ZWRnXOj6
2011/01/04(火) 22:15:366、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:010489Perl忍者 ◆M5ZWRnXOj6
2011/01/04(火) 22:47:52オブジェクト指向つかわなくてもかけるじゃん(笑)
オブジェクト指向つかわなくてもかけるじゃん(笑)
オブジェクト指向つかわなくてもかけるじゃん(笑)
オブジェクト指向つかわなくてもかけるじゃん(笑)
オブジェクト指向つかわなくてもかけるじゃん(笑)
オブジェクト指向つかわなくてもかけるじゃん(笑)
なに?wブロガーとかがOOPとかについてわめいてるから?wオブジェクト指向つかわなくてもかけるじゃん(笑)
オブジェクト指向つかわなくてもかけるじゃん(笑)
オブジェクト指向つかわなくてもかけるじゃん(笑)
オブジェクト指向つかわなくてもかけるじゃん(笑)
オブジェクト指向つかわなくてもかけるじゃん(笑)
オブジェクト指向つかわなくてもかけるじゃん(笑)
オブジェクト指向つかわなくてもかけるじゃん(笑)
なに?wブロガーとかがOOPとかについてわめいてるから?w
0490デフォルトの名無しさん
2011/01/05(水) 01:11:17あれを
begin
raise
rescue => e
p e # ここで表示させるにはどうすればいいですか?e.backtraceは寂しすぎる。
end
0491デフォルトの名無しさん
2011/01/05(水) 01:43:450492デフォルトの名無しさん
2011/01/05(水) 15:11:46putsなら問題ないんだけどな・・・
0493デフォルトの名無しさん
2011/01/05(水) 18:50:54ユーザーの環境でニホンゴ文字が利用可能かの判断は、$KCODE の設定の有無を見てる
$KCODE が "NONE" であるなら、文字列を \123 等のバイト列表示に変換して標準出力に流す
てことで、適宜 $stderr.puts str.tosjis とかするか、$KCODE="s" した上で p str するかしれ
個人的には p でニホンゴ文字が表示されてしまうのは好きではない
設定の有無だけじゃなくて内容も見て自動で変換とかやって欲しくね、というのをやってるのが Ruby1.9.x
0494デフォルトの名無しさん
2011/01/05(水) 20:25:54なるほどサンキュー
0495Perl忍者 ◇M5ZWRnXOj6
2011/01/05(水) 22:25:26Perl最強だぜ!
0496Yappo
2011/01/06(木) 17:45:10PHPも使えるけどな
0497まつもとひろゆき
2011/01/06(木) 17:55:570498まっつ
2011/01/06(木) 18:16:050499デフォルトの名無しさん
2011/01/06(木) 18:32:31return を省略した場合に比べて遅いんだけど、そういうもんなのかな?
1.9 系ではほとんど変わらないみたいだけど。
0500nihen
2011/01/06(木) 20:21:120501デフォルトの名無しさん
2011/01/06(木) 21:39:261.8ではそういうもんです。
1.9では最適化されるのかも。
0502デフォルトの名無しさん
2011/01/06(木) 21:52:48def sum(a, b)
a + b
end
puts sum(1,2)
SCRIPT
returnあってもなくても同じ結果になるね。
0503デフォルトの名無しさん
2011/01/06(木) 23:59:240504デフォルトの名無しさん
2011/01/07(金) 00:13:38Windowsのコマンドプロンプトは、標準だとテキスト処理のコマンド足りなさ過ぎだから
他の言語とかでコマンドプロンプト使う機会が多かった俺にはなかなか役に立った
0505デフォルトの名無しさん
2011/01/07(金) 00:37:36なければこれまでに必要になったものをもう一回Rubyで書いてみるとか
0506デフォルトの名無しさん
2011/01/07(金) 01:08:280. 準備
パスの通っている場所を確保する
-S で起動できるかテスト
または *.rb に関連付けて、スクリプトファイルだけで実行できるようにする。
1. 第一段階
# オプションの -p や -n は使わない。
ARGF.each{ |line|
# ここに何か書く
print line
}
2. 第二段階
optparse または、getoptlong を使ってオプションを取り扱う
3. 第三段階
関数・メソッドを書いて、見通しを良くする
0507デフォルトの名無しさん
2011/01/07(金) 07:10:00メソッドの説明とかある程度見聞きしてサンプル写経してなお、
特に作りたいものも作れそうなものも思いつかないなら、
とりあえず一旦Rubyを置いて街に出て別なことやれ
必要になったらたぶんまたRubyに帰ってくるからさ
プログラミングなんて無理してやるようなもんでもねえよ
0508デフォルトの名無しさん
2011/01/07(金) 07:53:15Perl忍者やめろ
0509デフォルトの名無しさん
2011/01/07(金) 08:54:490510デフォルトの名無しさん
2011/01/07(金) 16:32:36gem update したらエラーが出るよ〜
0511デフォルトの名無しさん
2011/01/09(日) 16:57:18cmdだと特に乱れたりしないんだけど。
なんか文字コードの設定とかいるんですか?
>> s=" y1 z"
=> "【1\201z"
>> puts s
【1】
=> nil
>> `ruby -v`
=> "ruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mswin32]\n"
0512デフォルトの名無しさん
2011/01/09(日) 17:08:29String#inspectのバグ。お使いのバージョンの直後のp250で修正されてる。
あと、バージョンを出すときは、RUBY_DESCRIPTIONという定数があるよ。
0513デフォルトの名無しさん
2011/01/09(日) 17:12:19irbの出力は、最後に評価(実行)した式の値をinspectしたもの。
putsはinspectしないので化けない。
0514デフォルトの名無しさん
2011/01/09(日) 17:46:52>お使いのバージョンの直後のp250で修正されてる。
よく見たら一年前のバイナリ…
irb(main):008:0> RUBY_DESCRIPTION
=> "ruby 1.8.7 (2010-12-23 patchlevel 330) [i386-mswin32]"
に変えてみたところ症状は変わらず。
s="【1】"
を左から順番に打つと問題なく入力でき
s="【】"
と打ってからカーソルを戻して1を入れると
irb(main):006:0> s=" y 1z"
=> "【・z"
irb(main):007:0> puts s
【・z
のように崩れるみたいです。
窓の設定で関係ありそうなのはこれくらいですかね。
現在のコードページ
932(ANSI/OEM - 日本語 Shift-JIS)
とりあえず余所で打ってコピペすれば先に進められそうなので解決?しました。
ありがとうございます。
0515デフォルトの名無しさん
2011/01/09(日) 17:50:420516デフォルトの名無しさん
2011/01/09(日) 18:03:08と環境変数を設定してあるので
>> $KCODE
=> "SJIS"
になってます。
0517デフォルトの名無しさん
2011/01/09(日) 18:23:29> 変えてみたところ症状は変わらず
いや変わっとるがな
String#inspect で最後の文字がバイト表現になるのはバグで、p330 で修正済み
irb において、バックスペースで Unicode の曖昧幅の記号文字を消すとその後のカーソル位置が不良になるのは
readline かターミナルエミュレータか何かが原因だろう
0518デフォルトの名無しさん
2011/01/09(日) 18:35:22・ マルチバイト非対応のreadline.dllをパスのどっかで読み込んでいる
・ 誰も試してなかったが、半月前に出た 1.8.7-p330 の mswin32 の Readline が実は変
どれかなんじゃないかな
0519デフォルトの名無しさん
2011/01/09(日) 18:47:060520デフォルトの名無しさん
2011/01/09(日) 22:56:06いやあれはそもそも不安定すぎて入力したらよく落ちるが
0521デフォルトの名無しさん
2011/01/10(月) 00:24:32今はp302で、Ruby187フォルダの中には「bin」「doc」「lib」「share」フォルダとアンインストーラしか入っていません。
失敗が怖くてまだ何もしていない状態なんですが、これはp330の中身を丸ごとコピーするというのとは違いますよね?
ここからどうすればいいんでしょうか?
0522デフォルトの名無しさん
2011/01/10(月) 01:14:120523デフォルトの名無しさん
2011/01/10(月) 01:25:53言われるまで全然気づきませんでした。
ありがとうございます。
0524デフォルトの名無しさん
2011/01/10(月) 08:06:27マクロンがつかないアルファベットに変換するにはどうすればよいですか
table = {"\u014c" => "O", "\u014d" => "o"} #他のは省略
table.each{|key, value| res.gsub!(key, value)}
puts res.encode("CP932", :undef => :replace, :replace => 'UGAAAAAAAAAAA')
こんな風にやってますけど、いい方法を教えてください
ruby 1.9.1p429 (2010-07-02 revision 28523) [i386-mswin32]
0525デフォルトの名無しさん
2011/01/10(月) 09:14:12require 'addressable/idna'
def unicode_canonical_decomposition(one_char)
[Addressable::IDNA.__send__(:unicode_sort_canonical,
Addressable::IDNA.__send__(:unicode_decompose, one_char.unpack('U*'))
).first].pack('U')
end
str = "?, ?, ?, ?, ?"
puts str.split(//u).map{|s| unicode_canonical_decomposition(s)}.join #=> "a, e, i, o, u"
UTF-8 の「1文字」だけを unicode_canonical_decomposition に渡す
addressable gem をインストールしてない場合は gem install addressable
いくつか問題がある
いちばん大きいのは、Unicode 正規分解が可能なものはぜんぶ分解してしまうこと
これを制御することはできない
puts "ぱぴこ".split(//u).map{|s| unicode_canonical_decomposition(s)}.join #=> "はひこ"
"?" みたいな2文字+ダイアクリティカルマークに分解されるものは
unicode_sort_canonical の返り値からアルファベットだけ探すという処理を入れないと無理
str = "?"
puts str.split(//u).map{|s| unicode_canonical_decomposition(s)}.join #=> "a"
あと、うっかり Ruby1.8 でサンプル作ったので 1.9 に変換するのめんどい
自力で好みのテーブルを作って置換するのがいちばんだと思う
0526デフォルトの名無しさん
2011/01/10(月) 09:19:21require 'rubygems'
require 'addressable/idna'
def unicode_canonical_decomposition(one_char)
[Addressable::IDNA.__send__(:unicode_sort_canonical,
Addressable::IDNA.__send__(:unicode_decompose, one_char.unpack('U*'))
).first].pack('U')
end
str = "ā, ē ī ō ū"
puts str.split(//u).map{|s| unicode_canonical_decomposition(s)}.join #=> "a, e, i, o, u"
str = "ぱぴこ"
puts str.split(//u).map{|s| unicode_canonical_decomposition(s)}.join #=> "はひこ"
str = "ǣ"
puts str.split(//u).map{|s| unicode_canonical_decomposition(s)}.join #=> "a"
0527デフォルトの名無しさん
2011/01/10(月) 09:27:050528デフォルトの名無しさん
2011/01/10(月) 09:46:55addressableもActiveSupport::Mulibyteも使ったことないので
これを機に試してみます。ついでに逃げてきた文字コードの
勉強することにします。ありがとう
0529デフォルトの名無しさん
2011/01/10(月) 09:50:44たとえば関数の引数に配列を渡し、関数内でその配列を操作すると、もとの配列が変更されてしまいます。
def f(arg)
arg << "x"
end
arr = ["a", "b"]
f(arr)
p arr #=> ["a", "b", "x"]
これがPHPなら、argを変更してもarrは変更されないのですが、Rubyは違うようです。
つまり、Rubyは参照渡しだということなんだと思いますが、あってますでしょうか。
0530デフォルトの名無しさん
2011/01/10(月) 10:08:38require "rubygems"
require "babosa"
p " ".to_slug.approximate_ascii.to_s #=> "aeiou"
でよくね?
0531デフォルトの名無しさん
2011/01/10(月) 10:10:49あってる
0532デフォルトの名無しさん
2011/01/10(月) 10:13:29babosaってなんじゃらほい、と思ってググったが、URLのslugを作るライブラリか。
0533デフォルトの名無しさん
2011/01/10(月) 10:40:05…はあ、ページが提案する(またはページタイトル等から生成される)、
動的または投稿で作られたページの固定URLを表現する際に使ってもよい文字列
このスレをミラーするページのURLがttp://example.com/2chview/Ruby-Part-40になるみたいなもんか
アスキー文字っぽいものはURLとして読みやすいアスキー文字に揃えてしまうという機能がついてるのね
0534デフォルトの名無しさん
2011/01/10(月) 10:47:27実のところ「参照渡し」ではない
参照渡しだとして理解すると本当は危険
というか参照渡しとはなんぞやという面倒な話に
0535デフォルトの名無しさん
2011/01/10(月) 10:49:500536デフォルトの名無しさん
2011/01/10(月) 10:53:52Rubyに関数は(ry
irb(main):001:0> def f(arg)
irb(main):002:1> arg = [0, 1, 2, 3]
irb(main):003:1> end
=> nil
irb(main):004:0> ary = [4, 5, 6, 7]
=> [4, 5, 6, 7]
irb(main):005:0> f(ary)
=> [0, 1, 2, 3]
irb(main):006:0> ary
=> [4, 5, 6, 7]
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/1534
>rubyには値渡ししかなく引き数として与えられた変
>数の値を変えても元の式の値は変わりません.ただし,オブジェク
>トの参照が渡るので値に対して破壊的な操作は可能です.
Rubyの変数は「ラベル」として考えるもので、メソッドの引数は「ラベルの値渡し」をしている。「オブジェクトの値渡し」ではなく。
とりあえずググればいろいろ出てくるよ。
0537デフォルトの名無しさん
2011/01/10(月) 13:37:360538デフォルトの名無しさん
2011/01/10(月) 13:44:200539デフォルトの名無しさん
2011/01/10(月) 13:57:530540デフォルトの名無しさん
2011/01/10(月) 16:34:150541デフォルトの名無しさん
2011/01/10(月) 17:22:45自分でそのように書かない限り、Rubyにそのようなものはないぞ。
0542デフォルトの名無しさん
2011/01/10(月) 17:42:260543デフォルトの名無しさん
2011/01/10(月) 18:41:570544デフォルトの名無しさん
2011/01/10(月) 20:46:00のようなエスケープ文字が勝手にアンエスケープされてしまい、困っています。
html = Nokogiri(<html><body>こんにちは テストです。</body></html>)
text = html.search('body').first
textの中身は以下のようになってしまいます。
<body>こんにちは テストです。</body>
のようなエスケープ文字をそのまま保持させる方法はないでしょうか。
0545デフォルトの名無しさん
2011/01/10(月) 20:50:42再投稿します。
NokogiriでHTMLをパースしたいのですが、
&nbsp;のようなエスケープ文字が勝手にアンエスケープされてしまい、困っています。
html = Nokogiri(<html><body>こんにちは&nbsp;テストです。</body></html>)
text = html.search('body').first
textの中身は以下のようになってしまいます。
<body>こんにちは テストです。</body>
&nbsp;のようなエスケープ文字をそのまま保持させる方法はないでしょうか。
0546デフォルトの名無しさん
2011/01/10(月) 21:11:49はともかく、実体参照の解決はlibxmlが制御できんとこで自動でやってるので制御できん
ナマのHTMLを取得する手段はないと思ってくれていい
0548デフォルトの名無しさん
2011/01/10(月) 22:25:000549デフォルトの名無しさん
2011/01/11(火) 00:00:25>>529
参照渡しにはならないよ。値渡しだよ。あえていうなら「参照の」値渡しだよ。
そもそもPHPもデフォルトはメソッドの引数も値渡しのようだが
PHP: 関数の引数 - Manual - http://php.net/ http://php.net/manual/ja/functions.arguments.php
代入の話かと思ったが代入演算子もオブジェクトの場合は参照がコピーされるようだぞ
PHP: 代入演算子 - Manual - http://www.php.net/ http://www.php.net/manual/ja/language.operators.assignment.php
>>531
まーたデタラメを広めるなw
0550デフォルトの名無しさん
2011/01/11(火) 00:01:230551デフォルトの名無しさん
2011/01/11(火) 00:31:00初心者スレだからしょうがない面はあるだろ
>>531はなにゆえ断言したのか…
0552デフォルトの名無しさん
2011/01/11(火) 06:12:37ただ、それは「参照渡し」とは違う
0553デフォルトの名無しさん
2011/01/11(火) 06:36:010554デフォルトの名無しさん
2011/01/11(火) 07:15:52C 言語には「存在しない」が。全部値渡しだぞ、あれ。渡してる値が整数だったりポインタだったりするだけだ。
C++ や Pascal には参照渡しがある。
0555デフォルトの名無しさん
2011/01/11(火) 07:29:37ある言語の概念を他の言語に無理矢理適用しようとするのやめようぜ
0556デフォルトの名無しさん
2011/01/11(火) 07:39:52変数は荷札。引数は荷札と紐を渡す。
0557デフォルトの名無しさん
2011/01/11(火) 07:47:140558デフォルトの名無しさん
2011/01/11(火) 09:19:51名前渡しできたよー
def namae(arg)
eval "#{arg} = 999"
end
$hensu = 1
namae :$hensu
p $hensu #=> 999
0559デフォルトの名無しさん
2011/01/11(火) 10:12:05Cには参照渡しが「ないからこそ」、Cでのポインタ渡しは
ポインタ以外を渡す行為と対称して参照渡しと呼ばれるのだな
Cだけの世界では、>552的な意味で間違ってはいない
まあ、汎用な計算機科学っぽい事象かと思ったら
特定の言語実装べったりのローカル概念でしたというのは
稀によくある
0560デフォルトの名無しさん
2011/01/11(火) 10:31:15たまに俺の用法で辞書書き換えろとか言い出す困ったちゃんもいるが。
0561デフォルトの名無しさん
2011/01/11(火) 11:13:22> ポインタ以外を渡す行為と対称して参照渡しと呼ばれるのだな
呼ぶな。
C++ には本物の参照渡しがあるし、早速混乱するぞ。
0562デフォルトの名無しさん
2011/01/11(火) 11:18:39というか値渡しだって「値を渡してるから略して値渡しなんだよね」と認識してる人が大多数だろう
「ポインタという名前の参照用情報を渡してるから略して参照渡しと呼ぶね」と認識することを責めることはできん
0563デフォルトの名無しさん
2011/01/11(火) 11:26:340564デフォルトの名無しさん
2011/01/11(火) 11:26:43・ 不用意に略語にするな
・ あなたのプログラミング上の造語はほぼ確実にどっかの専門用語だ
・ 正しい語を使って話せ
でいすか
0565デフォルトの名無しさん
2011/01/11(火) 11:28:42技術解説+理解を促進させるサンプルがあれば
不正確な比喩表現なんて必要ない
0566デフォルトの名無しさん
2011/01/11(火) 11:34:37説明表現を考えているわけではない
「それは〜〜が〜〜で〜〜〜なわけだ」
「なるほど○○なんですね」 ← これ
「いや違う」
をなんとかしようなんとかできんなという話だ
0567デフォルトの名無しさん
2011/01/11(火) 11:37:37いや違う〜は〜って意味だから覚えてね、でOKじゃん。
0568デフォルトの名無しさん
2011/01/11(火) 11:38:110569デフォルトの名無しさん
2011/01/11(火) 11:43:20適当な壷の中にでも封印しておくのがよい
0570デフォルトの名無しさん
2011/01/11(火) 21:43:01紐ってどういう例え?
0571デフォルトの名無しさん
2011/01/11(火) 21:45:220572デフォルトの名無しさん
2011/01/11(火) 21:51:56ぶっちゃけツクールの組み込みクラスなんだけども、どう定義されてるか見てみたいんだ。
0573デフォルトの名無しさん
2011/01/11(火) 22:19:240574デフォルトの名無しさん
2011/01/11(火) 22:21:02できたらいいなとは思うんだけどやっぱり無理かな
0575デフォルトの名無しさん
2011/01/11(火) 22:37:32rubyにそんな機能はないです
0576デフォルトの名無しさん
2011/01/11(火) 23:10:380577デフォルトの名無しさん
2011/01/11(火) 23:42:04詳しく知らんがRPGツクールだろ
>>574
ソースを見たいということならば、そのInputやWindowがネイティブコンパイルされた拡張ライブラリでないなら
中身を見られるかもね
でも確かファイルやライブラリは暗号化されていたはずだから、なんらかの方法で復号化のメソッドを探せばいんじゃないかな
ただ拡張ライブラリ内で復号化してそのまま読み込まれていたら面倒だな
0578デフォルトの名無しさん
2011/01/12(水) 07:44:07今の自分にはハードルが高いということは分かった。ありがとう。
もう少し調べてみる。
0579デフォルトの名無しさん
2011/01/12(水) 08:38:48open('./rpg.rb', 'w'){|f|
ObjectSpace.each_object(String){|x|
f.write x if x.include?('module RPG')
}
}
0580デフォルトの名無しさん
2011/01/12(水) 17:20:21ありがとう。どこに置けばいい?
イベントコマンドでもスクリプトエディタの何もないところでも「module RPG」がずらっと出力されるだけだった。
ちなみにif以降を消して実行してみたらRPG::Mapとかは取り出せたけどInputやWindowは出なかった。
バイナリファイルを開いた時のようなごちゃごちゃした部分がかなりあったんだけど、つまり>>577の言った通りネイティブコンパイルされてて取り出せないということだろうか
0581デフォルトの名無しさん
2011/01/12(水) 17:59:17'module RPG' みたいな文字列リテラルはブロックの外に出さないと
ブロック評価するたびに文字列オブジェクト生成されるから
「module RPG」が無駄にずらっと出力されてしまうと思われ。
0582デフォルトの名無しさん
2011/01/13(木) 19:20:12バイナリモードで読んでからforce_encodingすると速いと書いてあったんでやってみた。
爆速じゃねーか
内部で自動的にやってることをスクリプトに書き出しただけなのになんでこれほど違うんだろう?
0583デフォルトの名無しさん
2011/01/13(木) 20:34:59\r\n \n \r のどれでも改行だと認識するためのUniversalNewline
とか言う処理が入っていて遅いと聞いた
ワンライナーや自作テキストフィルタで1.8だと 1秒未満のやつが
1.9だと2〜3秒かかって、イラッと来るときがある
ブロックデバイスからのファイル読み込みに限って、高速なルーチンに切り替えるとかできないものだろうか
0584デフォルトの名無しさん
2011/01/13(木) 21:29:14Windows上で作成した\r\n改行のテキストファイルをLinux上で読むと結果が異なってくる?
0585デフォルトの名無しさん
2011/01/13(木) 23:12:080586デフォルトの名無しさん
2011/01/14(金) 03:22:51馬鹿には無理
0587デフォルトの名無しさん
2011/01/14(金) 03:43:23改行処理なんてやってるのはメジャーどころじゃWindowsぐらいじゃないかな
もしかしたらMacOSもやってたかも知れないが(今はUnix系なので多分やってない)
ShiftJIS + \r\nなら、Linux上でも最近のエディタなら流石に読めるよ
中途半端にEUC + \r\nとかやられたら流石に分からんかも知れんがw
0588デフォルトの名無しさん
2011/01/14(金) 07:41:38もちろんエンコーディング指定は適切にしたとして、$がどこにマッチするかとか振舞いに違いがあるのかどうか
0589デフォルトの名無しさん
2011/01/14(金) 07:50:09分かりにくくてすみません
0590デフォルトの名無しさん
2011/01/14(金) 08:01:26やってから言えば?
0591デフォルトの名無しさん
2011/01/14(金) 09:30:57爆速に決まってるじゃねーか。エンコーディングのラベルをはりかえる以外なにもしないんだから。
0592デフォルトの名無しさん
2011/01/14(金) 18:21:57最近はソフトとか勝手に入れられなくてね
>>591
そういうからくりでしたか。納得です。
0593デフォルトの名無しさん
2011/01/14(金) 18:28:36そのくらい家でやればいいだろw
0594デフォルトの名無しさん
2011/01/14(金) 19:21:480595デフォルトの名無しさん
2011/01/15(土) 13:46:21コンパイルする前にあらかじめインストールしておいたほうがいいライブラリはありますか。
現在のところ、libreadline-devをインストールしておいたほうがいいことは分かってます。
けどdebian系だと、インストールしておいたほうがいいライブラリがほかにもあった気がするので質問してみました。
知ってる人がいたら教えてください。
0596デフォルトの名無しさん
2011/01/15(土) 14:12:19zlib1g-dev
libncurses-dev
libffi-dev
libyaml-dev
で足りると思う。
あと自分はいれていないが、必要であればTcl/Tk
0597デフォルトの名無しさん
2011/01/15(土) 16:29:340598デフォルトの名無しさん
2011/01/15(土) 16:30:42↓実行すればバイナリ作るのに必要なもの全部入るよ
1.9.1だけどあんまり変わらなんじゃないかな
sudo apt-get build-dep ruby1.9.1-full
0599デフォルトの名無しさん
2011/01/15(土) 17:00:52ビルド失敗ですぐ気付くからいいけど
0600デフォルトの名無しさん
2011/01/15(土) 17:02:25リポジトリからだと必要だけど。
0601デフォルトの名無しさん
2011/01/15(土) 23:44:14Windowsで改行処理してLinuxでしてないってこと?
今の時代むしろナンセンスに感じるんだけど
もうFTPで転送時に改行コードや文字コード置き換える時代じゃないし
それだとWindowsで読めていたテキストが、Linuxで改行増えているようなことになるのかな?
Windowsで編集して、Linuxで処理するようなこともよくやっていて気になった
0602デフォルトの名無しさん
2011/01/16(日) 00:47:57HTML のソースを良く見た頃の話だけど、Mac ユーザーの HTML は一部が壊れていた。
あと Mac は、ファイルの先頭にプロパティがあったじゃん。
あれも、変なデータをうpする原因になっていたんだろうなと思った。
0603デフォルトの名無しさん
2011/01/16(日) 02:21:430604デフォルトの名無しさん
2011/01/16(日) 02:23:39BOMいらなくなるじゃん?
0605デフォルトの名無しさん
2011/01/16(日) 07:38:120606デフォルトの名無しさん
2011/01/16(日) 15:25:30openやFile.exist?の引数としてUFT-8のファイルパスを指定したいです
というか、wxRubyがUFT-8前提なのでUTF-8が通らないと日本語パスが使えない・・・(´・ω・`)
0607デフォルトの名無しさん
2011/01/16(日) 20:49:47wxRubyがどうのよりも1.8系はUTF-8を扱えてもmswin32やmingw32はUNICODEのファイルパスにそもそも対応していないのでは
Cygwinを使うのも手だけどwxRubyが問題か
0608デフォルトの名無しさん
2011/01/16(日) 22:50:070609606
2011/01/16(日) 23:06:45レスありがとう
Cygwinはライセンス的に使えるライブラリが限られてしまうので避けたいです
1.9.2@mswin32でUFT-8のファイルパスが扱えることは確認しました
・・・が、今度は1.8.7で動いていたwxRuby関係のコードが動かない罠
こりゃ詰んだか・・・il||li ○| ̄|_
0610デフォルトの名無しさん
2011/01/17(月) 00:24:57=> Module
Module.class
=> Class
どういうことなの。。
0611デフォルトの名無しさん
2011/01/17(月) 02:49:33それはどういうことが分からないんだ?
・回答A
ClassはModuleを継承している。
でもModuleもClassのインスタンスであり、すべての親であるObjectだってClassのインスタンス。
こういった基本的なクラスは相互に依存し合っていて、どこかが欠けると成立しない。
卵が先でも鶏が先でもない。両方あるからこそ成り立つ。
だからこそ、言語本体に組み込まれて存在している。
・回答B
後者の式は「Moduleクラス」や「Classクラス」のクラスを得る式。
クラスのクラスを得るのだから、当然返ってくるのはClassに決まっている。
Moduleクラスそのものを得たいなら
Module.class
なんて書くのは完全に蛇足で、単に
Module
と書く。
0612デフォルトの名無しさん
2011/01/17(月) 06:55:42どういうことって言われても。。
>Class.superclass
>=> Module
Classの親クラスはModuleってだけのこと。
>Module.class
>=> Class
ModuleはClassクラスのインスタンスオブジェクトだってだけのこと。
ModuleもClassもStringもObjectも、Classクラスのインスタンスオブジェクト。
0613デフォルトの名無しさん
2011/01/17(月) 09:36:380614デフォルトの名無しさん
2011/01/17(月) 09:52:340615デフォルトの名無しさん
2011/01/17(月) 09:56:350616デフォルトの名無しさん
2011/01/17(月) 13:33:29そんなのわかってんだろうけど、
つながりとして考えたとき驚いたってことだろ。
得意になって断片的な説明して笑えるw
0617デフォルトの名無しさん
2011/01/17(月) 14:45:560618デフォルトの名無しさん
2011/01/17(月) 14:51:540619デフォルトの名無しさん
2011/01/17(月) 15:59:44結局断片的な説明しかできないじゃん。
それを得意になって笑えるとか、そんなん悪趣味な釣りとしか思えんよ。
0620デフォルトの名無しさん
2011/01/17(月) 16:13:480621デフォルトの名無しさん
2011/01/17(月) 16:16:44そう考えるようにした方がいい。まだ間に合う
0622デフォルトの名無しさん
2011/01/17(月) 18:12:14>>611
>Moduleクラスそのものを得たいなら
>
>Module.class
>
>なんて書くのは完全に蛇足で、単に
>
>Module
>
>と書く。
Module.class で返されるのは Class であって Module ではない。
0623デフォルトの名無しさん
2011/01/17(月) 18:31:10>>611 の指摘はそれほど外してない気がする。
>>610 は Ruby のクラス階層の is-a has-a の構造で混乱しているんじゃないかな。
0624デフォルトの名無しさん
2011/01/17(月) 18:35:440625デフォルトの名無しさん
2011/01/17(月) 20:06:37>>>610 は Ruby のクラス階層の is-a has-a の構造で混乱しているんじゃないかな。
混乱しているのはおまえのほう。has-a関係ない。
>>624
誰も気づいてないようだからつっこんでやるけど、だれがうまいこといえと
0626デフォルトの名無しさん
2011/01/17(月) 20:57:22superclass は Class のメソッド
並べると確かに変だな。
0627610
2011/01/18(火) 02:56:26意図していたことは>>611さんの回答Aで言っていることそのままでした。
Class.superclass
=> Module
ClassはModuleの性質を受け継いでいるのに
Module.class
=> Class
Moduleの元になるクラスはClassである。
という関係が直感的に意味不だったので。。
0628デフォルトの名無しさん
2011/01/18(火) 08:16:30Class⇔Module
サブクラス⇔スーパークラス
Module⇔Class
別の概念である。同じ「class」という単語が使われているが間違えないように。
0629デフォルトの名無しさん
2011/01/18(火) 14:28:00リリース時に処理系の環境がGPLなのは不可な案件か?
RubyGemsでもGPLなものもあるから気を付けろよ
それはそうとissueはこのあたりと関連チケットだな
1.8にポーティングは可能なのだろうか
その前にwin32は人が足りていないような気もするし
Ruby 1.9 - Bug #1685: Some windows unicode path issues remain - Ruby Issue Tracking System
http://redmine.ruby-lang.org/issues/show/1685
Ruby 1.9 - Bug #1771: system()/popen()/popen3() & windows & unicode is not working - Ruby Issue Tracking System
http://redmine.ruby-lang.org/issues/show/1771
0630tom
2011/01/18(火) 15:16:12req.set_form_data("aaa=bbb&ccc=ddd")
としてば場合、&、=をurlエンコードしない方法ってありますか?
0631デフォルトの名無しさん
2011/01/18(火) 19:23:17set_form_data は Hash を引数に期待する
req.set_form_data({'aaa' => 'bbb', 'ccc' => 'ddd'})
と書けば、キーと値は適切に application/x-www-form-urlencoded でエンコードされ、= と & による連結がふつーに行われる
下手に String#map が動作するもんだからエラーにならんのよね、文字列書いても
送信すべき処置済み巨大文字列が既に手元にあって、再エンコードとか何もして欲しくないという場合は、
適切な Content-Type を指定した上でふつうに post しれ
req.body = 'aaa=bbb&ccc=ddd'
req.content_type = 'application/x-www-form-urlencoded'
0632デフォルトの名無しさん
2011/01/19(水) 21:07:11JVN#30414126: Ruby Version Manager におけるエスケープシーケンスインジェクションの脆弱性
http://jvn.jp/jp/JVN30414126/
0633デフォルトの名無しさん
2011/01/20(木) 05:05:22まず、
a=[[aa],[x]],[[bb],[y]],[[aa],[z]],[[cc],[y]]
この配列があって、更にそれぞれの要素に対して
a[0]=[[ee],[y]],[[ff],[y]],[[ee],[x]],[[gg],[x]]
a[2]=[[hh],[y]],[[ii],[y]],[[hh],[x]],[[jj],[x]]
となる配列が有るのですが、
このとき " aa " にだけ着目して("x"にだけ着目するパターンもあります)
a[0]とa[2]の要素を抽出し、このうちのどれか1つの要素(例えば[[jj],[x]])
を選んで"ans"に代入するプログラムを作りたいのですが、良い方法は無いでしょうか?
ans = array[rand(a[0].size)]
ans = array[rand(a[[aa],[x]].size)]
では片方しか出せないし、
ans = array[rand(a[[aa],[.+]].size)]
とか出来たらうれしいのですが。
よろしくお願いします。
0634デフォルトの名無しさん
2011/01/20(木) 06:55:230635デフォルトの名無しさん
2011/01/20(木) 07:04:260636デフォルトの名無しさん
2011/01/20(木) 07:49:03というか要素が一つの配列を作るのはなぜ?
変数名だかメソッド名だか知らんが全部が全部抽象化されてるからまるで意味が伝わらん
0637デフォルトの名無しさん
2011/01/20(木) 07:50:480638デフォルトの名無しさん
2011/01/20(木) 08:10:14a[0] = [aa]
a[2] = [bb]
とその下のa[0]・a[2]の関係がわからなくなった時点で読むのをやめた。
0639デフォルトの名無しさん
2011/01/20(木) 08:30:450640デフォルトの名無しさん
2011/01/20(木) 12:40:09そういう言語じゃねぇから!
ちゃんとクラス分けしたほうがいい。
後は連想配列が使えないか考えろ。
それ以上はレスの内容だけだと何とも言えない。どんなデータが合ってそこから最終的に何を出したいのか書いてくれないと。
0641デフォルトの名無しさん
2011/01/20(木) 14:26:060642デフォルトの名無しさん
2011/01/20(木) 14:28:360643デフォルトの名無しさん
2011/01/20(木) 15:11:480644633
2011/01/20(木) 16:19:48aはハッシュで、値とキーが2重配列と配列になっています。
マルコフモデルの会話BOTを作りたいのですが、
詳しい説明文作っていたら一つ思い付いたので、
明日試してきます。
0645デフォルトの名無しさん
2011/01/20(木) 16:22:450646デフォルトの名無しさん
2011/01/20(木) 16:40:28面白そう
読んだことないけど「恋するプログラム―Rubyでつくる人工無脳」で
紹介されてるような事をやりたいのかな
0647デフォルトの名無しさん
2011/01/20(木) 18:03:46御意、自然言語能力も足りないよね
0648デフォルトの名無しさん
2011/01/21(金) 01:32:23メールの送信元に「本庄」を指定して送信すると文字化けするが、これを本庄で送りたい。
fromはメールアドレスだけではなく、"本庄 <[email protected]>"といった感じで差出人名を指定。
また、名前に「刈」を指定すると、from自体が消えてしまう。
環境
ruby 1.8.7
rails 2.3.8
プラグインは
ActionmailerJa
actionmailer_sender_patch
jpmobile
mbmail
という布陣
fromに本庄を指定して送信すると、こんな感じのメールが送られて、文字化けする。
From: =?iso-2022-jp?B?GyRCSz4xGyhC?= <[email protected]>
To: [email protected]
Subject: =?iso-2022-jp?B?GyRCTDVCahsoQg==?=
Mime-Version: 1.0
Content-Type: multipart/alternative; boundary=mimepart_4d3862eeda92e_6904..fdba898d62b4
Message-Id: <20110120162934.DF71D2CB41@smxxxxxxxxxxxxxxx>
刈という文字が入っていると、そもそもfrom自体が消えてしまう。
0649デフォルトの名無しさん
2011/01/21(金) 02:17:56Rubyに合った作り方学べるしいいと思うよ。
マルコフ連鎖するだけならそんなに難しくないし
0650デフォルトの名無しさん
2011/01/21(金) 12:44:28おれのことだけどな
それにそのライブラリがRubyに合った作り方をしてる保証はないだろ
0651デフォルトの名無しさん
2011/01/21(金) 13:15:570652デフォルトの名無しさん
2011/01/21(金) 13:51:45替えという点でもいくらでもきくね。
だから「ヒューマンスキル」みたいな言葉を必要以上に叫んだりするんだろうけど。
0653デフォルトの名無しさん
2011/01/21(金) 14:47:33よいコードを借りてくる
0654デフォルトの名無しさん
2011/01/21(金) 15:16:152. よいコードを借りてくる→偉大なプログラマ
1は成り立つが、2は必ずしも成り立たつわけではない
勘違いするな
0655デフォルトの名無しさん
2011/01/21(金) 15:26:320656デフォルトの名無しさん
2011/01/21(金) 15:27:460657デフォルトの名無しさん
2011/01/21(金) 15:29:21誰がコーディングするの?
0658デフォルトの名無しさん
2011/01/21(金) 16:41:210659デフォルトの名無しさん
2011/01/21(金) 17:01:09「偉大なプログラマは利用できるものは利用する」ということだろ。
利用するものがなきゃお手上げなのは、なんちゃってプログラマ。
0660デフォルトの名無しさん
2011/01/21(金) 19:59:272chに張り付きすぎなんじゃね
ネタもないのに無理して書きこむこともないのに
0661デフォルトの名無しさん
2011/01/21(金) 20:34:35っていう人は信用ならない。
ライブラリ叩くだけで終わるような書き捨てコードしか書いた経験のない輩。
0662デフォルトの名無しさん
2011/01/21(金) 20:36:43自分でライブラリ書いたりした経験が無いんだろうね
0663デフォルトの名無しさん
2011/01/21(金) 21:39:060664デフォルトの名無しさん
2011/01/21(金) 23:14:07Ruby使えば一行で済むよって言ってる奴と変わらん
0665デフォルトの名無しさん
2011/01/22(土) 09:03:040666デフォルトの名無しさん
2011/01/22(土) 17:33:37そもそもRubyのような高級言語を使うなよ
Cとかアセンブラ使え
いや言語から作れよ
つーかOSから作れ
0667デフォルトの名無しさん
2011/01/22(土) 17:38:000668デフォルトの名無しさん
2011/01/22(土) 18:54:550669デフォルトの名無しさん
2011/01/22(土) 19:05:18> Head First Railsを購入した。Railsのインストール方法については記述なし、Rails2.1-2.3に対応しているそうだ。内容はぼちぼち読むことに。
0670デフォルトの名無しさん
2011/01/22(土) 19:28:05昔、B-TRONのフリープロジェクトみたいなのあったけど
どうなったんだろ?
0671デフォルトの名無しさん
2011/01/23(日) 10:22:05グーグルの広告でもよくでてたじゃん?グーグルが1からつくったとかいうやつ
0672デフォルトの名無しさん
2011/01/23(日) 10:44:090673デフォルトの名無しさん
2011/01/23(日) 11:47:560674デフォルトの名無しさん
2011/01/23(日) 13:31:040675デフォルトの名無しさん
2011/01/23(日) 14:42:37序数の「0th」って未だに違和感あるな
0676デフォルトの名無しさん
2011/01/23(日) 15:43:330677デフォルトの名無しさん
2011/01/23(日) 17:08:09require 'cgi/session/pstore'
で、セッションを使いたいのだが
セッションファイルの保存されている場所とか、
セッションファイルの状態を確認するにはどうしたらいいのです?
0678デフォルトの名無しさん
2011/01/23(日) 17:14:300679デフォルトの名無しさん
2011/01/23(日) 17:47:410680デフォルトの名無しさん
2011/01/23(日) 19:44:01リファレンスならるりまで検索無料です
検索欄に CGI::Session::PStore いれて検索
Rubyリファレンスマニュアル全文検索 | るりまサーチ
http://rurema.clear-code.com/
↓
CGI::SessionかCGI::Session.newがあやしい
singleton method CGI::Session::PStore.new
http://rurema.clear-code.com/1.8.7/method/CGI=3a=3aSession=3a=3aPStore/s/new.html
↓
> [PARAM] option:
> ハッシュを指定します。
>
> 以下の文字列をキーとして指定することができます。
>
> tmpdir
>
> セッションデータを作成するディレクトリの名前を指定します。デフォルトは Dir.tmpdir です。
↓
実際に確認
ruby -rtmpdir -e "p Dir.tmpdir"
環境によって結果は変わるので略
あとはCGI::SessionかCGI::Session.newのtmpdirを再起動しても永続化するパスに変更すればいいんじゃないのか
0681デフォルトの名無しさん
2011/01/23(日) 19:44:44o CGI::Session::PStoreかCGI::Session::PStore.new
0682デフォルトの名無しさん
2011/01/23(日) 19:46:00x あとはCGI::SessionかCGI::Session.newのtmpdirを再起動しても永続化するパスに変更すればいいんじゃないのか
o あとはCGI::Session::PStore.newのtmpdirを再起動しても永続化するパスに変更すればいいんじゃないのか
0683デフォルトの名無しさん
2011/01/24(月) 18:24:47で作ったセッション変数sessをsess.deleteで消すと、/tmpからは
8fff8fcf432c382b
のようなファイルがちゃんと消えるのだが、
# apache restart
をかますと、
8fff8fcf432c382b
8fff8fcf432c382b.lock
のように復活してくるのだが、なぜだ?
ブラウザのクッキーは消えてるので、もちろん再利用はできない。
session_expiresで設定した期限を過ぎても残ってる。
0684デフォルトの名無しさん
2011/01/24(月) 18:28:17Session::PStore
でも同様にsess.deleteをした後に/tmpを見ると該当ファイルは消えるが、
アパッチを再起動すると、ファイルのパーミッションが
-rw-------8fff8fcf432c382b
だったものが
-rw-r--r--8fff8fcf432c382b
になって復活してる。.lockは生成されないようだ。謎だ。
0685デフォルトの名無しさん
2011/01/24(月) 18:41:57FileStoreではcloseでupdateを実行しているから、このときまた書かれて
るのかな。
0686デフォルトの名無しさん
2011/01/24(月) 19:26:26今、「たのしいRuby 第3版」で勉強しているんですが、本にのってるコードがエラーになってしまいます。
なにがだめなのかおねがいします。
ソース↓
require "net/http"
require "uri"
url = URI.parse("http://www.ruby-lan.org/ja/")
http = Net::HTTP.start(url.host, url.port)
doc = http.get(url.path)
puts doc
ここからエラーメッセージ↓
/usr/lib/ruby/1.8/net/http.rb:560:in `initialize': getaddrinfo: Name or service not known (SocketError)
from /usr/lib/ruby/1.8/net/http.rb:560:in `open'
from /usr/lib/ruby/1.8/net/http.rb:560:in `connect'
from /usr/lib/ruby/1.8/timeout.rb:53:in `timeout'
from /usr/lib/ruby/1.8/timeout.rb:101:in `timeout'
from /usr/lib/ruby/1.8/net/http.rb:560:in `connect'
from /usr/lib/ruby/1.8/net/http.rb:553:in `do_start'
from /usr/lib/ruby/1.8/net/http.rb:548:in `start'
from /usr/lib/ruby/1.8/net/http.rb:440:in `start'
from http_get.rb:6
よろしくお願いします。
0687デフォルトの名無しさん
2011/01/24(月) 19:27:420688デフォルトの名無しさん
2011/01/24(月) 19:30:44さんくす!
おいらの3日を1分で解決したあなたに脱帽です。
ありがとうございました!
0689デフォルトの名無しさん
2011/01/24(月) 19:45:350690デフォルトの名無しさん
2011/01/24(月) 20:02:520691デフォルトの名無しさん
2011/01/24(月) 20:04:160692デフォルトの名無しさん
2011/01/24(月) 20:12:070693デフォルトの名無しさん
2011/01/24(月) 20:22:50報告がない以上、例外メッセージのどこに手がかりがあるかも気付いて
いなかった可能性が高いが。
0694デフォルトの名無しさん
2011/01/24(月) 20:36:500695683
2011/01/24(月) 20:43:02# reboot
0696デフォルトの名無しさん
2011/01/24(月) 20:48:09>>694
おかしいな、俺の手元の「たのしいRuby 第3版」(第1刷)の149ページではURLはあってるんだが
0697デフォルトの名無しさん
2011/01/24(月) 20:52:10www.ruby-lan.orgもエイリアスにしておくべき。
0698デフォルトの名無しさん
2011/01/24(月) 21:16:230699デフォルトの名無しさん
2011/01/25(火) 07:21:040700デフォルトの名無しさん
2011/01/25(火) 13:26:140701デフォルトの名無しさん
2011/01/25(火) 13:47:240702デフォルトの名無しさん
2011/01/26(水) 13:10:03Ruby で HTTP リクエストの PUT と DELETE を実装したいのですが、
net/http でやろうとしたらうまくいかないうえに、
推奨されていません的な警告が出てるような気がします。
このようなことが起こる理由としてなにか考えられることはありますか?
また、みなさんはこのようなとき、どのようなやり方で実装なさるのでしょうか?
教えてください。
0703デフォルトの名無しさん
2011/01/26(水) 14:59:59何したら何が返ってきたか書いて。
405 Method Not Allowed が返ってきてるだけだったりしないよね?
0704デフォルトの名無しさん
2011/01/26(水) 15:08:00>>1くらい読んでくれよ。
> 質問には以下を書くこと。へたくそな質問は再提出を要求される。
> ・最終的にやりたいこと(もっとよい方法がある場合が多いので)
> ・エラーメッセージ(自力で訳さずなるべくそのままで)
> ・詳しい内容(「動きません」「うまくできません」では回答しようがない)
> ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
0705デフォルトの名無しさん
2011/01/26(水) 15:26:58お手数おかけして申し訳ないです…。
以後、このようなことがないようにします。
>>703
Net::HTTP::Put ってのを使って、他サーバに XML の文字列を渡しているのですが、
data = '<?xml version=〜' ってとこで
warning: Object#type is deprecated; use Object#class
と出ます。
わかる人からしたら「まんまじゃねーか」と言われるのであろうことは
察しがついたのですが、申しわけありません。よろしくお願いします。
0706デフォルトの名無しさん
2011/01/26(水) 16:34:51本当にそのエラーが出るのか?
肝心のNet::HTTP::Putをどう使ってるのかさっぱりわからんし。
0707デフォルトの名無しさん
2011/01/26(水) 17:09:20作りかけなので VERIFY_NONE になってたりはしますが、こんなかんじです。
GET と POST も似たようなかんじでやってて、そっちはうまくいってるのですが…。
Net::HTTP.version_1_2
req = Net::HTTP::Put.new(putUrl)
req.basic_auth(name, pass)
https = Net::HTTP.new(サーバー名, 443)
https.use_ssl = true
https.ca_file = 'c:/openssl/ssl/cert.pem'
https.verify_mode = OpenSSL::SSL::VERIFY_NONE
https.verify_depth = 5
https.start{|http|
data = '<?xml version="1.0" encoding="UTF-8"?>〜'
req["content-type"] = "application/xml"
req["content-length"] = data.length.to_s
response = http.request(req, data)
$putRespXML = response.body
}
0708デフォルトの名無しさん
2011/01/26(水) 23:00:160709デフォルトの名無しさん
2011/01/26(水) 23:59:48ここまで聞いた限りでは原因不明
dataに代入してる文字列は、あくまでシングルクォート括りの文字列であって
「実際にはダブルクォート区切りの文字列で式展開(#{〜})してる」とか
そういうこともないんだよね?
だとすると、エラーの原因がさっぱりわからない
疑ってみるとすれば、警告の起こってる行が本当にそこなのかどうか、というぐらいか
0710デフォルトの名無しさん
2011/01/27(木) 00:04:34Railsアプリを作ってPUTリクエストを投げてみたけど普通に文句も言わず
更新できてるなぁ。(認証入れてないけど)
とりあえず怪しい箇所のアタリをつけて、1行ごとに
$stderr.puts '%s:%d' % [__FILE__,__LINE__]
を挟んで誰がウォーニングを出しているか見てみるくらいしか思いつかない。
Object#type が obsolete になったのはかなーり過去の話だが、
どっかのライブラリに残ってるんだろうかねぇ。
あるいはローカル変数のtypeがself.typeだと解釈されて…これはないか。
0711デフォルトの名無しさん
2011/01/27(木) 00:10:020712707
2011/01/27(木) 10:47:40data = のあとの XML の中に定義されていない変数が混ざっていました…。
みなさんに親身に考えていただいたのに、
こんなしようもない原因で本当に申し訳ないです…。
>>709 >>710
本っ当に助かりました!阿呆な理由ですみません…。
どうもありがとうございました。
0713デフォルトの名無しさん
2011/01/27(木) 11:51:36@cost1
@cost2
@cost3
@cost4
というアクセサつきのインスタンスがあったとして
def test(index)
x = ABC.new
case index
when 1
return x.cost1
when 2
return x.cost2
when 3
return x.cost3
when 4
return x.cost4
end
end
これのcostの後ろの数字をindexを参照してreturnしたいのですが
具体的にどう書けばいいのでしょうか?
return x.cost + index.to_s ????
0714デフォルトの名無しさん
2011/01/27(木) 12:17:40配列で返すとか。
return x.cost1, index
return [x.cost1, index]
↑どちらも同じ
0715デフォルトの名無しさん
2011/01/27(木) 12:36:49動的なメソッド呼び出しを聞いてるんじゃなくて?
0716デフォルトの名無しさん
2011/01/27(木) 13:00:31@costを配列にしろ
caseなんか使わず1行で終わる
0717デフォルトの名無しさん
2011/01/27(木) 14:18:28x = ABC.new
x.method("cost#{index}").call
でおk
此所嫁
http://www.ruby-lang.org/ja/man/html/Method.html
0718デフォルトの名無しさん
2011/01/27(木) 16:27:47x.__send__("cost#{index}")
0719713
2011/01/27(木) 19:01:12x.method("cost#{index}").call
を採用させていただきましたありがとうございます。
おかげですっきりしました。ちょっと考えたら配列でもいけそうですね。
>>718氏のやつもぐぐってみます。
0720デフォルトの名無しさん
2011/01/28(金) 16:01:01ソースコードと同じなのかなと思ったけど、他のライブラリのソースコードとごちゃ混ぜ状態になってたりしたら?
0721デフォルトの名無しさん
2011/01/28(金) 16:39:52requireとかincludeしてもごちゃ混ぜにはならないよ。
0722デフォルトの名無しさん
2011/01/28(金) 23:09:11複数のIOオブジェクトがあって、それぞれがアトランダムにreadable, writableになる場合の効率的な処理の仕方についてです。
selectを使うことでreadableあるいはwritableになったオブジェクトを教えてもらうことで
シングルスレッドで、それぞれのIOオブジェクトに対して適切な処理を行うことができると分かりました。
mainルーチン → IO.select([object1, object2, ..., objectN]) → 固有の処理
ところが処理対象のIOオブジェクトが有限なら各IOオブジェクト毎に以下のように行うほうがスループットは改善されるのでしょうか?
mainルーチン → n.times do thread.new(object) → IO.select(object) → 固有の処理
reactorパターンというものについて調べるとシングルスレッドでの実装例をよく見るのですが、
実際には「固有の処理」の中にIO待ちの要素がある場合はマルチスレッド化させることで多重度を持たせて
スループットを改善できるのではないかと考えました。
それとも、IO処理を全て一手に引き受けるスケジューラを作り、
IO処理は全てそこに丸投げしてコールバックするのが正しいreactorパターンなのでしょうか?
「スケジューラにクエリを入れる」という仕組みをどう書けばいいのか分かりません。
0723デフォルトの名無しさん
2011/01/28(金) 23:48:28┼─┐─┼─ / ,. `゙''‐、_\ | / /
│ │─┼─ /| _,.イ,,.ィ' ─────‐‐‐‐ 。←>>722
│ | │ | | | イン ,'´ ̄`ヘ、 // | \
__{_从 ノ}ノ/ / ./ | \
..__/}ノ `ノく゚((/ ./ |
/, -‐===≡==‐-`つ/ ,.イ  ̄ ̄// )) / ;∵|:・.
_,,,...//〃ー,_/(. / /ミノ__ /´('´ / .∴・|∵’
,,イ';;^;;;;;;;:::::""""'''''''' ::"〃,,__∠_/ ,∠∠_/゙〈ミ、、
/;;::◎'''::; );_____ @巛 く{ヾミヲ' ゙Y} ゙
≧_ノ __ノ))三= _..、'、"^^^ \ ! }'
~''''ー< ___、-~\( ,' /
\( ,'.. /
0724デフォルトの名無しさん
2011/01/29(土) 04:29:03eclipse+なんかプラグインが一番いいの?
0725デフォルトの名無しさん
2011/01/29(土) 05:27:02どちらの方式が良いかはケースバイケースだが、Rubyの場合は
マルチスレッド方式のほうが優れたパフォーマンスになるケースが多い。
一般にIOオブジェクトのI/O操作メソッドは、その操作が完了する迄、
リターンしない(=ブロックされる)。この様な一般的なケースでは、
シングルスレッド&select方式だとそのI/O完了待ち時間がネックになって、
CPUは空いてるのにシステム全体としてのスループットが頭打ちになる。
マルチスレッド方式では、あるスレッドがI/O待ちになれば他のスレッドへ
自動的に切り替わるから、CPUを有効に活用できる(無駄な待ち時間が無い)。
逆にselect方式が性能上で優位になるのは、標準のスレッドスケジューラの
オーバヘッドすら問題視されるような、性能要求に対してシビアな環境。
Rubyは、そんなシビアな環境下でのプログラミングには不適な軽量言語。
現実のサーバソフト設計では、システム全体はマルチスレッドで動かし、
個々のスレッド内で複数のI/Oを扱う場合にselectを用いるという、
第三のハイブリッド方式が採用されるケースが多いのではないかと思う。
例えばWebサーバなら、個々のワーカースレッドで、ネットワークからの
リクエスト受信待ちとディスクへのリード完了待ちをselectで同時に監視する。
0726デフォルトの名無しさん
2011/01/29(土) 07:08:47Ruby 1.8についていえば、スレッド切り替えがクソ重すぎて使い物にならない。
C10KどころかC1Kでも100ms毎にデータが飛んできたらスレッド切り替えだけで
CPUを使い果たす。
0727デフォルトの名無しさん
2011/01/29(土) 09:19:14個人的にはNetBeansがおすすめ。
http://ja.netbeans.org/
0728デフォルトの名無しさん
2011/01/29(土) 09:21:35とりあえず先端を走っているような人はエディタとターミナルでやってる。
0729デフォルトの名無しさん
2011/01/29(土) 09:23:09おい、昨日の今日でそれを奨めるのは微妙だぞ。
http://netbeans.org/community/news/show/1507.html
0730デフォルトの名無しさん
2011/01/29(土) 09:23:11俺も現時点ではNetBeansが良いと思う
Eclipseは動作がやや重く、インターフェースがわかりにくいという印象
しかしRDEは完全に更新止まっちゃったな
0731デフォルトの名無しさん
2011/01/29(土) 09:39:47http://twitter.com/#!/rubymine/status/31011218869190656
0732デフォルトの名無しさん
2011/01/29(土) 09:39:590733デフォルトの名無しさん
2011/01/29(土) 10:00:520734デフォルトの名無しさん
2011/01/29(土) 10:05:50それともオラクルマジック発動か。
はたまた…
0735722
2011/01/29(土) 10:42:19大変勉強になりました。
「第三のハイブリッド方式」というのが私のケースでも最適に思えるので、複雑で頭が混乱しそうになりますが
設計レベルからもう一度書き直してみます。
# LLに親しむとプログラミングが楽しくなる反面、安易にコードを書き散らさない慎重さが必要だと感じます。
0736デフォルトの名無しさん
2011/01/29(土) 11:26:14Ruby開発環境ってないしな
0737デフォルトの名無しさん
2011/01/29(土) 11:48:36メソッド呼び出しは全てに()をつける、というのはありでしょうか?
0738デフォルトの名無しさん
2011/01/29(土) 11:54:08それで見やすくなるのならそうすればいいけど、
人のコードを読むのは楽にならないぞ。
0739デフォルトの名無しさん
2011/01/29(土) 13:04:35「第三のハイブリッド方式」で言う「マルチスレッド」って Ruby (のグリーンスレッド) でも可?
0740デフォルトの名無しさん
2011/01/29(土) 14:40:01操作対象のI/Oオブジェクトをワーカースレッドがselectで監視(待機)できるならば可能。
原理(考え方)としてはC(のPOSIXスレッド)もRuby1.8(のグリーンスレッド)も同じ。
たとえばネットワークなら、標準のSocketクラスは(selectで)監視できる。
DBなら、PostgreSQLだと拡張ライブラリ側で非同期I/Oメソッドが提供されているから、
それを使えば(selectで)監視できる。ファイルだと現状は無理だけど、
たとえばLinux AIO(非同期I/O)を拡張ライブラリとして「自力で実装できれば」可能になるだろう。
ただし、Windowsの場合にはWinSockのselect関数の実装が(Ruby1.8のスレッドスケジューラ以上に)
あまりにも糞重すぎる代物だから、サーバ向け処理には(性能面で)「まるで」使い物にならない。
UNIX系であれば、C0.1KクラスならRubyでも「程々に」使える。C0.1Kクラスは最大100台程度だから、
部門サーバ/個人サーバの規模になるわけで、「そこそこ」適用範囲は広いと言えると思う。
性能問題はシステム問題の一つだから、絶対的な一般解というのは存在しない。
>>425の冒頭で書いたように、ケースバイケースで対応(設計/実装方式)を判断・決定すべきだろう。
0741デフォルトの名無しさん
2011/01/29(土) 16:35:24それ、むしろRubyのメリットのはずなんだが
変数かメソッドかを気にしなきゃいけない状況からなんとかしたら?
0742デフォルトの名無しさん
2011/01/29(土) 16:57:000743デフォルトの名無しさん
2011/01/29(土) 18:00:29一つのメソッドが大きすぎるんじゃないの?
0744722
2011/01/29(土) 18:08:15>>717のやり方を参考にすれば動かせそうに思えたので。
selectに渡せるものがIOのサブクラスだけなので、
スケジューリングというものをイベントを文字列としてパイプに突っ込むことで表現して、
FIFOでそれを取り出して処理するようにしてみました。
イメージとしては
1. クライアントがリクエストを送信
2. サーバのソケットに貯まる
3. IO.selectで受信して、リクエストをイベント化してイベントキューに登録
4. selectしてイベントキューにイベントが入っていればそれを取り出して処理
5. 処理の一部をイベント化して再度、イベントキューに登録
6. 以上をループ
実際のコード: http://codr.cc/FB0CA8BB04
こういう実装が実用的なのか、性能が出るのか、などについて教えていただけるとありがたいです。
あと、文字列をパイプに入れるのはダサイので他のやり方があれば…。
0745240
2011/01/29(土) 18:47:42実際のコード: http://codr.cc/E5A0F569F9
0746デフォルトの名無しさん
2011/01/29(土) 23:24:14ワーカースレッド用意して同一プロセス内で処理するなら、メッセージを文字列化するのは無駄だから
http://www.ruby-lang.org/ja/man/html/Queue.html
とか使ったほうがいいのでは
あとこれね
self.__send__(*str.chomp.split(","))
0747デフォルトの名無しさん
2011/01/29(土) 23:49:27自作するのはそれでだめなのがわかってからでもいいかと。
0748デフォルトの名無しさん
2011/01/30(日) 03:20:00>self.__send__(*str.chomp.split(","))
そういう書き方もできたんですね。参考になりました。
アドバイスに従い、Queueライブラリとthreadを使って>725の「第三の方式」を書いてみました。
実際のコード: http://codr.cc/C3719FF560
1. socket listen専用thread
2. リクエスト処理専用thread
3. socket write専用thread
の3つを作り、他threadからイベントを受け取りうる2つのthread(2.と3.)にQueueオブジェクトをあてがいました。
「第二の方式」に比べるとIO待ち時間を無駄にしない点と実装が単純になる点で優れていて、
スレッドコンテキストスイッチが発生するというデメリットがあると思います。
実際にはthread poolingを使って各threadを最大n多重できるようにしたほうがスループットを向上できるんでしょうね。
>747
thread間でのイベントの受け渡しをRevやEventMachineがどう実現しているのかをこれから参考にしてみます。
まずはこういうロジックを自分で書けるだけ深く理解することが今の目標です。
最終的にはSEDAアーキテクチャの劣化版くらいは書けるようになりたいです。
0749デフォルトの名無しさん
2011/01/31(月) 18:40:420750デフォルトの名無しさん
2011/01/31(月) 18:47:140751デフォルトの名無しさん
2011/01/31(月) 19:27:00正確には仕様変更の未反映
本来あるべき動作は以下のとおりだけど現状ではIOのエンコーディングに影響しASCII-8BITになる
るりま曰く
> binmode
> Windows の IO にはテキストモードとバイナリモードという2種類のモードが存在します。
> これらのモードは上で説明した IO のエンコーディングとは独立です。改行の変換にしか影響しません。
ruby-dev:36827 辺り参照。
0752デフォルトの名無しさん
2011/01/31(月) 19:27:07それは正常な動作です
p 'foo'.force_encoding('BINARY').encoding
# => #<Encoding:ASCII-8BIT>
ASCII-8BIT と BINARY は同じ意味
で、あってるのかな?
0753749
2011/01/31(月) 19:28:110755デフォルトの名無しさん
2011/01/31(月) 21:38:45バイナリファイルの読み込みに支障が出たからあえてASCII-8BITにした
るりまは間違い
0756デフォルトの名無しさん
2011/01/31(月) 21:48:510757デフォルトの名無しさん
2011/01/31(月) 21:53:270758デフォルトの名無しさん
2011/01/31(月) 22:34:22IO自体をASCII-8BITにする必要はない。
支障があるとすればバイナリファイルをテキスト読み込みメソッドで読んだ場合だけど
それ自体がおかしいから考慮しなくていい。
0759デフォルトの名無しさん
2011/02/01(火) 19:45:20テキストをファイルにUTF-8で出力したいです。
例として、テキストファイル(中身はSJIS)を読み込んで、別のファイルに内容は同じで
UTF-8で出力するプログラムを書きました(ソースの文字コードは SJIS)が、あってますか?
require 'nkf'
inFileName = ARGV[0] # 入力ファイル名
outFileName = ARGV[1] # 出力ファイル名
outFile = open(outFileName, "w")
open(inFileName, "r") {|file|
while line = file.gets
line = NKF.nkf("-Sw", line);
outFile.puts line
end
}
outFile.close
java だと以下のように、ファイルハンドルを開くときに文字コードを指定し、そこに書き込んだ内容は、自動的にその文字コードになります。
FileOutputStream fos = new FileOutputStream(outFileName);
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
BufferedWriter bw = new BufferedWriter(osw);
PrintWriter pw = new PrintWriter(bw);
pw.println("あいうえお");
Ruby 1.8系の場合は文字列は単なるbyte列であり、入力のテキストファイルから読み込んだ文字列はShiftJISのバイト列です。
そのバイト列に対して NKF ライブラリで UTF-8 のバイト列にした後で、
出力ファイル用のファイルハンドルに書き込むと、write はそのバイト列をそのままファイルに格納するだけ、と理解しました。
他に正しい方法があれば教えてください。
0760デフォルトの名無しさん
2011/02/02(水) 03:38:350761デフォルトの名無しさん
2011/02/02(水) 04:09:580762デフォルトの名無しさん
2011/02/02(水) 12:31:49で(a = a + 1)、実引数のほうは変化していないので値渡しだと言っているのには
ちょっと違和感を感じます。
後述に、Arrayオブジェクトを例に出して、参照の値渡しの話をしていますが、
これだと、まるでFixnumオブジェクトの場合は、同じ値の新しいオブジェクトを作って
それを渡す値渡しで(Fixnumでは値が同じで異なるオブジェクトというのはない気はしますが)、
Arrayオブジェクトだと参照の値渡しになると言っている感じがします。
まだRubyを学び始めて間もないので、私の勘違いかもしれませんが、皆さんはどう
思われますか?
Rubyist Magazine - 値渡しと参照渡しの違いを理解する
http://jp.rubyist.net/magazine/?0032-CallByValueAndCallByReference
def foo(a, b) # a, b を「仮引数」という
a += 1
b += 2 # a と b を変更する
end
x = 10
y = 20
foo(x, y) # x, y を「実引数」という
puts x #=> 10 # 変更されてない
puts y #=> 20 # 変更されてない
0763デフォルトの名無しさん
2011/02/02(水) 12:47:00> で(a = a + 1)、実引数のほうは変化していないので値渡しだと言っているのには
> ちょっと違和感を感じます。
なぜどのように違和感を感じるのでしょうか。
それが値渡しなのですが。
0764デフォルトの名無しさん
2011/02/02(水) 12:59:27数値型がイミュータブルだからとかそういう話なんじゃないかな知らんけど
0765デフォルトの名無しさん
2011/02/02(水) 13:07:190766デフォルトの名無しさん
2011/02/02(水) 13:20:31function hoge($arg)
{
$arg[0] = 1;
return $arg;
}
$arr = array();
$arr[0] = 0;
$ret = hoge($arr);
var_dump($arr); #=> 0
var_dump($ret); #=> 1
0767デフォルトの名無しさん
2011/02/02(水) 14:02:180768デフォルトの名無しさん
2011/02/02(水) 16:39:25>>764さんのおっしゃる通りです。
そのサイトではメモリ図を用いて説明されていて、仮引数に渡すときFixnumだとC言語のように
そのコピーが作られて(新たなオブジェクトを作るということでしょうか?)、Arrayだと
参照の値渡しだと言ってます。
しかも、Fixnumはイミュータブルなのに値を変化させたと書いてあります。
私の認識では、a = a + 1というのは、a + 1という新たなFixnumオブジェクトを作って、その
オブジェクトをaが指し示すというもので、値を変化させるというものではないと思ってました。
Rubyは数値も含めて全てがオブジェクトとうたわれているので、ArrayだろうとFixnum
だろうと同じような扱いをするのだと思っていたから違和感を感じました。
すなわち、ArrayやFixnumを含む全てが参照の値渡しだと思っていたということです。
実は、Fixnumのような数値はいわゆる値型のように実装(ふるまうと)されているということでしょうか?
それとも私の認識(もしくはこのサイトに対しての私の読解)にどこか間違いがあるのでしょうか?
0769デフォルトの名無しさん
2011/02/02(水) 16:50:43> それとも私の認識(もしくはこのサイトに対しての私の読解)にどこか間違いがあるのでしょうか?
結論から言うと Yes。
Ruby は、Fixnum だろうと Array だろうと「値渡し」。
まず Fixnum のような、配列じゃない場合は、値渡しになることは理解していると思う。
Ruby の Array は何を保持しているかというと、配列の先頭のアドレスだけを持っている。
(配列の実体を直接持っているわけではない。C言語での、char と char* の違いと同じ)
そしてメソッドに Array を渡すと、メソッドを受け取った側(仮引数)では、アドレスがコピーされている。
メソッドの呼び元の Array と、メソッドの中の Array の実体はそれぞれちがうものであり、
配列の先頭アドレスを、2重に持っていることになるので、「値渡し」ということができる。
※先頭アドレスを二重に持っているものの、それぞれが同じ場所を指しているので、
配列の実体( >>762 のるびまでの、[10, 20])は1つしかない。
0770デフォルトの名無しさん
2011/02/02(水) 16:58:12お前はそもそも値型/参照型の値渡し/参照渡しの計4通りあること理解してるのかと小一時間
0771デフォルトの名無しさん
2011/02/02(水) 17:10:46あなたの解釈は概ね合っているんじゃないかな。
ただ、内部の実装については知らないのかも。
Fixnumなどの一部のクラスのインスタンスも「見かけ上は」他のオブジェクトと同様であるかのように振る舞う。
「見かけ上」であって、内部的には即値の処理に解釈されている。
でもそれによってRuby上での扱いが変わるということはほとんど無い。
強いて言えば、状態を変更するような動作はできない、という程度。
でもその「状態を変更できない」のがポイントで
「状態を変更出来ない、同じオブジェクト」への参照をコピーするということは
変数の値そのものをコピーすることにほぼ等しいワケ。
だって参照の値と扱う値は1対1に対応するんだから。
そのサイトの説明は若干はしょってるというか、細かい話を避けてるんだろうけど
強ち間違った説明かと言うとそういうワケでもないよ。
0772デフォルトの名無しさん
2011/02/02(水) 17:20:18def foo(a, b) # a, b を「仮引数」という
a = a + b # 仮引数aの指すオブジェクトに同bを足したものを仮引数aに再代入
end
a = 1
foo(a,1)
p a # => 1 #当然変化なし
b = [10,20]
foo(b, [1])
p b # => [10,20] #もちろん変化なし
0773デフォルトの名無しさん
2011/02/02(水) 17:32:41それが多分一番混乱しないんだが、
まず左辺値右辺値とは何かがわかってないとわかんない。
0774デフォルトの名無しさん
2011/02/02(水) 18:31:01値渡し、参照型の値渡し、参照渡しの計3通りだよね?
0775デフォルトの名無しさん
2011/02/02(水) 19:55:25Fixnumのようなクラスは、値型のように実装されているということならこのサイトの説明も
納得です。
ただ、Rubyは全てがオブジェクトだとうたっているので、実装上そうなっているとはいえ、
値型のようなふるまいの説明をするのはどうかなとは思いますが。
0776デフォルトの名無しさん
2011/02/02(水) 20:59:260777デフォルトの名無しさん
2011/02/02(水) 21:04:470778デフォルトの名無しさん
2011/02/02(水) 21:19:43るびまはるびま(雑誌)でしかない。一般人向けに直感的に分かりやすい表現をしているのではないかと。
仮にRubyに公式な言語定義書というものが存在して、その中での記述であれば問題がもしれないが....。
0779デフォルトの名無しさん
2011/02/02(水) 22:15:11もともと使ってないからなんともならない。
0780デフォルトの名無しさん
2011/02/03(木) 00:52:550781デフォルトの名無しさん
2011/02/03(木) 01:00:36引数の渡し方を理解する上においては、Fixnumが即値がどうかは特に関係がない
Fixnumが即値であろうがなかろうが、結論は同じで、Rubyの引数は値渡しだよ
0782デフォルトの名無しさん
2011/02/03(木) 01:13:530783デフォルトの名無しさん
2011/02/03(木) 03:24:131.8.7かこんな風だったか
・ソースの文字コードがSJISで、文字列をSJISで扱うなら、
ruby -Ksや$KCODE='s'のように文字コードを指定する
http://rurema.clear-code.com/1.8.7/method/Kernel/v/=2dK.html
・書き出しはWindowsで文字コード変えた場合は
outFile = open(outFileName, "w")
でなく、バイナリモードで
outFile = open(outFileName, "wb")
・NKFやNKFを使うKconvは罠があるので気をつけて使う。
NKF使うならNKF.nkfに追加で"-xm0"がいるんじゃなかろうか。半角→全角カナとMIMEの解釈の防止のため。
http://www.ruby-lang.org/ja/man/html/trap_Kconv.html
http://www.ruby-lang.org/ja/man/html/trap_NKF.html
1.8.7のWindowsでは何が推奨なんだ?
0784デフォルトの名無しさん
2011/02/03(木) 06:55:24>Fixnumのようなクラスは、値型のように実装されているということならこのサイトの説明も
>納得です。
「値型」って何のこと?Javaでいうプリミティブ型のことかな。
Rubyは全てがオブジェクトだけどFixnumの実装はポインタに整数値を埋め込んでいるのは確か。
でもそう実装になっていることと、引数が値渡しであることは関係がない。
>ただ、Rubyは全てがオブジェクトだとうたっているので、実装上そうなっているとはいえ、
>値型のようなふるまいの説明をするのはどうかなとは思いますが。
勘違いしているなあ。
Fixnumだろうが、それ以外の通常のオブジェクトだろうが、Rubyでは値渡しであり、
どちらの場合でも同じふるまいなんですけど。
なぜそんな勘違いをしてしまったのか知りたい。
0785デフォルトの名無しさん
2011/02/03(木) 07:53:410786デフォルトの名無しさん
2011/02/03(木) 07:59:47勘違いしてるのはどっちだ
0787デフォルトの名無しさん
2011/02/03(木) 08:15:160788デフォルトの名無しさん
2011/02/03(木) 08:17:42自分でサンプルコード書いてobject_idチェックしろ
質問者はド素人じゃないっぽいしそれくらい出来るだろ
0789デフォルトの名無しさん
2011/02/03(木) 08:47:10Cで言うポインタと普通の型の違い
0790デフォルトの名無しさん
2011/02/03(木) 08:59:20http://lmgtfy.com/?q=%E5%80%A4%E5%9E%8B+%E5%8F%82%E7%85%A7%E5%9E%8B
0791デフォルトの名無しさん
2011/02/03(木) 10:11:15http://www.ruby-lang.org/ja/man/html/Ruby_CDD1B8ECBDB8.html#Immediate.20Value
Immediate Value
参照ではなく、実際の値が変数に格納さ れるもの。
Rubyの現在の実装ではFixnum、Symbolとnil/true/falseだけが即値である。
しかし、Fixnumが即値でないRubyの実装があっても構わないし、モデル上全ての値が
オブジェクトへの参照であると考えても差し支えない。
0792デフォルトの名無しさん
2011/02/03(木) 10:23:03PHPは値渡しで、&をつけると参照渡し
じゃね?
0793デフォルトの名無しさん
2011/02/03(木) 10:29:36def foo(a, b)
a += 1
b += 2
end
x = 10
y = 20
foo(x, y)
p "x = #{x}" #=> 10 # 変更されてない
p "y = #{y}" #=> 20 # 変更されてない
c = x
d = y
c += 1
d += 2
p "x = #{x}" #=> 10 # 変更されてない
p "y = #{y}" #=> 20 # 変更されてない
p "c = #{c}" #=> 11 # 変更されてる
p "d = #{d}" #=> 22 # 変更されてる
0794デフォルトの名無しさん
2011/02/03(木) 10:59:51値渡し/参照渡しの回答をしている人が多いね。
質問への回答でなく単に値渡し/参照渡しの話をしたいだけかもしれないけど。
質問者の質問の仕方が悪いのと、引用したるびまの記事が値渡し/参照渡しについての説明
というのも影響しているんだろう。
0795デフォルトの名無しさん
2011/02/03(木) 11:11:06>PHPは値渡しで、&をつけると参照渡し
PHPは知らないが、Cの場合は全てが「値渡し(call by vale)」。
変数の前に単項演算子 & を付けると、その変数のアドレス値(ポインタ値)を得えることができるし、
それを関数の引数として渡すこともできる。(たとえば f(&x) など)
けれどその場合もアドレス値を「値渡し」しているのであって、
それを「参照渡し(call by reference)」とは言わない。
ただし、Cだけを語る文脈の中で、その「アドレス値の値渡し」のことを「ポインタ渡し」と呼ぶことがある。
C限定の文脈であれば、「ポインタ渡し」という用語は間違いではない。
でも、Cのポインタ渡しが「参照渡し」と混同して解釈されがちなのは事実で、注意して用いるべき。
繰り返すけど、これはCの場合。PHPは知らないよ。(同じかもしれないし、違うかもしれない)
0796デフォルトの名無しさん
2011/02/03(木) 11:35:40質問者への返答としては、>>791が FA(Final Answer) でいいんじゃないかと。
まとめると、Rubyの場合は、原始的(primitive)なオブジェクト(たとえばFixnum)は
即値(immediate value)であり、それらはメソッド呼び出しの際には値渡し(call by value)される。
その他のオブジェクト(たとえばArray)は即値ではなく、
メソッド呼び出しの際にはオブジェクトへの参照が渡される。つまり参照渡し(call by reference)される。
Cとは異なり、純粋OOPであるRuby(あるいは元祖であるSmalltalk)には、
アドレス(ポインタ)という概念がそもそも存在していないことに注意すべき。
C++やJavaのように、手続き型言語に後付けでOO機能を継ぎ足した言語は、
アドレスと(オブジェクトへの)参照が複雑に絡み合っているので、(厳密な意味論の)解釈は非常に難解なものになった。
ただし、だからといって、そんなC++/Java流の解釈をRubyに当てはめようとするのは無茶苦茶であるとしか言えない。
# 率直に言って、「Rubyはすべて値渡しである」と間違った自我流の解釈を押し付けようとする
# >>776,784のカキコ(同一人物?)は迷惑に感じる。(ぶっちゃければウザイの一言)
0797デフォルトの名無しさん
2011/02/03(木) 11:42:35>>796みたいなアホが出てくる事を予想して先回りしてたわけだな
0798デフォルトの名無しさん
2011/02/03(木) 11:55:460799デフォルトの名無しさん
2011/02/03(木) 12:03:530800デフォルトの名無しさん
2011/02/03(木) 12:42:11全然間違ってるよ。Ruby においては、
オブジェクトに原始的(primitive)かどうかなんて区別はない。
> Cとは異なり、純粋OOPであるRuby(あるいは元祖であるSmalltalk)には、
> アドレス(ポインタ)という概念がそもそも存在していないことに注意すべき。
んなことはない。むしろ Java より Ruby のほうが C の思想を引きずっていると思う。
むしろ >>769 あたりが FA なんじゃないかと。とはいえ >>794 の通りかも知れないけど。
0801796
2011/02/03(木) 13:03:36>んなことはない。むしろ Java より Ruby のほうが C の思想を引きずっていると思う。
その「JavaのほうがRubyよりもOOPらしい」というところをkwsk
全体的に、否定形の文体(.... ではない)に終止している感じがする。
XXXデハナイ(XXXは誤りである)で終えずに、YYYデアル、あるいはZZZデアルのほうが、前向きな議論ができると思う。
>>769のような(C++/Java流の)値渡しによる解釈はC++/Javaに慣れた人にとっては自然かもしれないけれど、
それをアドレス(ポインタ)という概念が存在しないRubyに当てはめようとする考え方そのものに無理がある、
というのが>>796の要旨。
自分としては、正直C++/Javaには詳しくないし、
>>791の解説を一からひっくり返してくれる解釈があれば、すごく嬉しかったりする。
0802800
2011/02/03(木) 13:19:33Java のほうがRubyよりOOPらしい、なんて一言も言ってないよ。
Ruby のほうが C の思想を引きずっていると書いた理由は、言語仕様ではないが、
Ruby のライブラリが C の関数と同じオプションを受け取れたりするところ。
(たとえば open() の第2引数(mode) とか、NKF とか)
PHP も Cの関数のラッパになっていることが多いが、Ruby も似ているので、
「これを呼ぶと C のあれが呼ばれるんだな」と感じることが多かったので、「C を引きずっている」と書いた。
「引きずっている」と書いているけど悪いと言っているわけではない。
> 全体的に否定形の文体・・・・
ここは私の力不足なところもあるが、
Ruby には、Java のような primitive 型とオブジェクトの区別がなく、すべてが
オブジェクトなのだから仕方がない。
そのオブジェクトが immutable かそうでないかというのはあるけど。
0803デフォルトの名無しさん
2011/02/03(木) 13:37:50自分もRubyを使うだけで、内部のことまで考えたことはないんだけど、、、
>>791でFixnum等が実装では即値扱いになっているのは、イミュータブルだから即値として扱っても
オブジェクトとしての性質が保たれるのと、パフォーマンスの問題もあるんではないだろうか?
例えば、Fixnumをオブジェクトとして実装するとGCの回収が必要となり、速度的な問題を生じるとか。
(即値だとGCがいらないかとか知らないけど)
他の実装はどうなんだろうか?
JRubyやIronRubyもCRubyと同じような実装なんだろうか?
>>791では即値でない実装があっても構わないと書いてあるし。
0804デフォルトの名無しさん
2011/02/03(木) 14:06:28ファイルオープンのモードはJavaでも引きずってなかったっけ?
最近は違うのかも知れんけど。
0805デフォルトの名無しさん
2011/02/03(木) 14:18:140806デフォルトの名無しさん
2011/02/03(木) 15:06:08「値渡し」「参照渡し」はプログラミング言語一般の引数の渡し方を説明するための用語であって
Ruby内の引数の渡し方を説明するためだけの用語ではない。
「Rubyに当てはめようとする……」という指摘がそもそも無理筋。
0807デフォルトの名無しさん
2011/02/03(木) 16:16:210808デフォルトの名無しさん
2011/02/03(木) 18:19:330809デフォルトの名無しさん
2011/02/03(木) 20:37:150810デフォルトの名無しさん
2011/02/03(木) 20:38:48ループする話も必要
0811デフォルトの名無しさん
2011/02/03(木) 21:44:36できればメジャーなやつで
あと参照の値渡しとRubyの値渡しは何が違う?
0812デフォルトの名無しさん
2011/02/03(木) 21:47:58> できればメジャーなやつで
C++
0813デフォルトの名無しさん
2011/02/03(木) 21:49:160814デフォルトの名無しさん
2011/02/03(木) 21:52:370815デフォルトの名無しさん
2011/02/03(木) 21:54:52$ cat ref.cpp
#include <stdio.h>
void foo(int &x) { x++; }
int main(void) { int a = 774; foo(a); printf("%d\n", a); return 0; }
$ gcc ref.cpp && ./a.out
775
参照渡しでは、仮引数 x が実引数 a の別名として機能する
0816デフォルトの名無しさん
2011/02/03(木) 21:59:22自分が知る範囲ではPerl,PHP,VB6,VB.NET/C#/C++はサポートしてる
VB6はデフォルトで参照渡し
C++/VBNET/C#はデフォルトが値渡しだが参照渡し用構文がある
Perlは参照渡しも値渡しも可能。
PHPも参照渡し可能。詳細忘れた
Cは直接サポートしてないが参照渡しのエミュレートは出来る
さっき初心者スレに書いたが元ネタはこのスレか
0817デフォルトの名無しさん
2011/02/03(木) 22:24:220818デフォルトの名無しさん
2011/02/03(木) 23:20:570819デフォルトの名無しさん
2011/02/03(木) 23:30:19参照渡しとごちゃ混ぜになるよりは相当マシ
0820デフォルトの名無しさん
2011/02/03(木) 23:36:42そういうのrubyでどう書くのか悩んだわ昔
0821デフォルトの名無しさん
2011/02/04(金) 00:34:59最初の質問である>>762を見る限りでは
値渡しと参照渡しについて質問してるとしか思えない
0822デフォルトの名無しさん
2011/02/04(金) 03:09:47あたかも値のようにしか見えない例と
あたかも参照のようにしか見えない例しか乗せてないし
class Fixnum; attr_accessor :a;end
def fn1(m); m = 456; end
def fn2(m); m.a = 456; end
def fa1(b); b = [4, 5, 6]; end
def fa2(b); b[0] = 0; end
n = 123
fn1(n) # 変更されない
p n # => 123
a = [1, 2, 3]
fa1(a) # 変更されない
p a # => [1, 2, 3]
n = 0
n.a = 123
fn2(n) # 変更される
p n.a # => 456
a = [1, 2, 3]
fa2(a) # 変更される
p a # => [0, 2, 3]
ってかFixnum普通(?)にインスタンス変数持てるんかいw
0823デフォルトの名無しさん
2011/02/04(金) 05:41:24変数がさすのはあくまでオブジェクト
n = 123
p n.object_id # => 247
fn1(n) # オブジェクトは変更されない
p n.object_id # => 247
a = [1, 2, 3]
p a.object_id # => 5839984
fa1(a) # オブジェクトは変更されない
p a.object_id # => 5839984
n = 0
n.a = 123
p n.object_id # => 1
fn2(n) # オブジェクトは変更されないが、その内部はメソッドコールによって変更される( Fixnum#a= メソッドによって )
p n.object_id # => 1
a = [1, 2, 3]
p a.object_id # => 5839168
fa2(a) # オブジェクトは変更されないが、その内部はメソッドコールによって変更される( Array#[]= メソッドによって)
p a.object_id # => 5839168
0824デフォルトの名無しさん
2011/02/04(金) 08:42:50class Fixnum; attr_accessor :a;end
a = 1
b = 1
a.a = 99
p b.a #=> 99
0825デフォルトの名無しさん
2011/02/04(金) 08:54:48値がコピーされる
値の中に含まれる「ポインタ」や「参照の値」を使って
参照先への操作をしない限り、呼び出し元への影響はない
参照渡し:
変数そのものが渡される
呼び出し先での仮変数への代入は、呼び出し元の変数への代入と同義になる
参照の値渡し:
「参照の値」がコピーされて渡される
その参照先への操作は呼び出し元に影響するが
仮引数そのものへの代入は、単に参照先が書き換えられるだけで元環境に影響しない
0826デフォルトの名無しさん
2011/02/04(金) 08:56:24×仮変数
○仮引数
0827デフォルトの名無しさん
2011/02/04(金) 10:47:23その後の質問(>>768)で、質問者がFixnumが値型/参照型なのかを聞いているのがわかったけどな。
>実は、Fixnumのような数値はいわゆる値型のように実装(ふるまうと)されているということでしょうか?
その質問以降でも、値渡し/参照渡しのレスをしている人が多くいるってことは、質問者の質問
の仕方が悪かったのは否めないけど。
0828デフォルトの名無しさん
2011/02/04(金) 15:17:22Pascal, Modula-2
使ったことないから知らないけど、Delphiってやつもそうか?
0829デフォルトの名無しさん
2011/02/04(金) 17:05:05ここ最近のスレで「Rubyは値渡しじゃない」という独自の解釈を押し付けようとしているのは同一人物なのか?
ここは初心者スレなんだから混乱させるのはやめろよ
あえていうなら、Rubyは値渡しじゃないという例を見せてくれよ
他の言語では>>815のように参照渡しがサポートされているがRubyは違うだろ
>>817
「参照の値渡し」がややこしいなら、単に「値渡し」でいいよ。
Java、C#でclassをnewして、特に参照渡しだと指定せずにメソッドの引数に指定するとそれは「値渡し」だよね
参照を「値渡し」するのは今時の言語では珍しくない方法じゃないのかな?
0830デフォルトの名無しさん
2011/02/04(金) 18:07:43バグか他の実装でしょう。
0831デフォルトの名無しさん
2011/02/04(金) 18:11:050832デフォルトの名無しさん
2011/02/04(金) 18:50:26だからいちいち関数に入ったところでコピーを作るんだよね?
0833デフォルトの名無しさん
2011/02/04(金) 21:03:36参照という言葉の認識の違いですれ違ってるところまで同じかよ
とりあえず「オブジェクトそのものは渡してません」でいいじゃないか
0834デフォルトの名無しさん
2011/02/04(金) 21:17:100835デフォルトの名無しさん
2011/02/04(金) 23:14:550836デフォルトの名無しさん
2011/02/05(土) 00:43:22それ単に混同してるだけじゃね?
まあ本人から説明を聞かないことにはわからんけど
0837836
2011/02/05(土) 00:44:140838デフォルトの名無しさん
2011/02/05(土) 01:37:58# クラスがnewしかできないいくつかの言語ね
さすがのC++のカオスをしった前には、あれは英断だったんだなと思わざるをえなかった
C++の動的生成と静的生成わかれているのは、殺すためのハンター試験じゃないのかと
0839デフォルトの名無しさん
2011/02/05(土) 01:41:11俺の解釈、お前の解釈なんてしったこっちゃねーんだよ。
コンピューターのようにコードを出して、そのままの解釈をさせるようにかんけつに書け
というわけでお前らの「値渡し」と「参照の値渡し」「(あと>>796のなんだっけ?w)」
定義のコードをかけ。来てるのがRubyistじゃないならRubyじゃなくてもいい
0840デフォルトの名無しさん
2011/02/05(土) 02:15:25じゃあまずは>>839いってみようか
0841デフォルトの名無しさん
2011/02/05(土) 02:17:420842デフォルトの名無しさん
2011/02/05(土) 02:49:50300万程度の案件が1ヶ月ぐらいかかったわ
もう絶対にやらん
0843デフォルトの名無しさん
2011/02/05(土) 07:52:26俺は796じゃないけど。
> あえていうなら、Rubyは値渡しじゃないという例を見せてくれよ
この値渡しというのは、参照の値渡しではない値渡しのこと?
もし、そうなら
ary1 = []
ary2 = ary1
ary2.push "hoge"
p ary1 #=> ["hoge"]
で終了だよね。
そうじゃないなら、>>796が間違ってるよね。参照渡しと参照の値渡しを混同してるだけ
っぽいけど。
即値はこの例がわかりやすい。
x = 100
y = 100
p x.object_id == y.object_id #=> true
即値の場合は参照の値渡しではなく、普通の値渡し。
0844デフォルトの名無しさん
2011/02/05(土) 07:56:34>>817
参照の値渡しという言葉は必要。初心者にはだるいだろうけど、覚えてもらうしかない。
値渡しと参照渡しと参照の値渡しが区別できないと、激しく混乱することになる。
0845デフォルトの名無しさん
2011/02/05(土) 07:57:100847デフォルトの名無しさん
2011/02/05(土) 08:35:50> この値渡しというのは、参照の値渡しではない値渡しのこと?
> もし、そうなら
>
> ary1 = []
> ary2 = ary1
> ary2.push "hoge"
> p ary1 #=> ["hoge"]
>
> で終了だよね。
どこが?
> Rubyは値渡しじゃないという例
ということは、参照渡しだという例を見せてくれ、ってことでしょ。
それのどこが参照渡しの例なの?
0848デフォルトの名無しさん
2011/02/05(土) 08:50:35a = "hoge"
b = a
b = "hage"
p a #=>"hage"
ってことだよね?aが指し示してるところをbに渡すんだから
0849デフォルトの名無しさん
2011/02/05(土) 09:12:20ちがうお
なんちゃら渡しは関数の実引数と仮引数の関係を説明する言葉
その例では関数が出てきていないのでなんちゃら渡しは問題にならない
0850デフォルトの名無しさん
2011/02/05(土) 09:46:51>即値はこの例がわかりやすい。
>x = 100
>y = 100
>p x.object_id == y.object_id #=> true
その例では即値かどうかはわからないよ。実際は確かに即値なんだけれども
「100という定数名があり、そこには予め
『数値の百が設定されたFixnumオブジェクトのインスタンス』
への参照が入っている」とでも表現すれば解るだろうか。
要するにそういう定義だったとしても同じ結果になってしまうんよ。
>>848
関数もしくはそれに相当するもの(Rubyではメソッド)が出てこないと説明できない。
def f(x)
x = 127
end
v = 743
f(x)
p v # => 真の意味で「参照渡し」ならば 127 になるが「参照の値渡し」であるRubyでは 743 のまま
0851デフォルトの名無しさん
2011/02/05(土) 09:57:26自分には難しくて何をやっているのかわからないけど。
[ruby-list:47825] Re: 参照渡しの実現方法は?
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/47825
0852デフォルトの名無しさん
2011/02/05(土) 10:30:47こんな実際にはできないたとえを持ち出したら
もうめちゃくちゃなのだが
0853デフォルトの名無しさん
2011/02/05(土) 10:36:42def hoge(x)
x = [3,4,5]
end
a = [0,1,2]
p a
hoge(a)
p a
もし関数hogeでxが参照渡しされていたら、2回目の表示が[3,4,5]になる
0854デフォルトの名無しさん
2011/02/05(土) 10:37:34んじゃ「リテラルがすべて同様の値を持つインスタンスへの参照だったら」とでも書けばいい?
0855デフォルトの名無しさん
2011/02/05(土) 10:41:240856デフォルトの名無しさん
2011/02/05(土) 11:05:41同じ挙動を実現できているってこと
参照渡しのルールは、渡された変数名が、元々の変数を表すかのように振舞うこと
例で何をやってるかって、メソッド呼び出し元から
変数名と変数実体との対応表(binding_obj)を受け取って、
それのもとでevalしてるだけ
0857デフォルトの名無しさん
2011/02/05(土) 11:43:58るびまの記事がちっともわかりやすくなかったということか
しくしく
0858デフォルトの名無しさん
2011/02/05(土) 11:53:52お前「同様」の意味わかってないだろ
0859デフォルトの名無しさん
2011/02/05(土) 12:01:24d
擬似参照渡しみたいなことは一応できるってことね。
>>857
執筆者?
0860デフォルトの名無しさん
2011/02/05(土) 12:30:22「同一の」…でいいのかな
0861デフォルトの名無しさん
2011/02/05(土) 12:31:49100という数値そのものではなく、100という数値のオブジェクトのことを
0862デフォルトの名無しさん
2011/02/05(土) 12:37:290863デフォルトの名無しさん
2011/02/05(土) 12:46:23ジェネリクス的なものまたはObject型なんかを使って
仮にPBR(pass by reference)というクラスにその型の変数を持たせ
swap(new PBR(a),new PBR(b))とやるしかないのではと思っている
ecmascript(javascriptやactionscript)に参照渡しは無いが
a.hogeとa["hoge"]が同じ意味をもつので
PBRはこれで代用出来る
actionscript3.0はTypedになってこの方式と相性悪くなってしまった
>>861
Readonlyな変数を参照渡ししようが値渡ししようがセマンティクスに影響はないので
あまり悩んでも意味は無いし
>>791でFixedNumの実装が即値でも参照でもいいってのはそういうことだと思う
1の値を2に書き換えて既存の1+1を全て2+2にしたいわけじゃないんでしょ?
即値のほうが効率は良いから
0864デフォルトの名無しさん
2011/02/05(土) 13:38:11どんな感じ?
0865デフォルトの名無しさん
2011/02/05(土) 17:17:27ただオブジェクトというものがあるだけ
変数はオブジェクトへの参照を格納してるだけ
メソッドコールするとそのオブジェクトへの参照を値渡ししてるだけ
Fixnumのように同じ表現だと常に同じオブジェクトを返すようなクラスは定義できるよ
class Foo
@pool = {}
def self.new(n)
return @pool[n] if @pool[n]
@pool[n] = super
end
def initialize(n) @n = n end
attr_accessor :a
end
a = Foo.new(1)
b = Foo.new(1)
a.a = 99
p b.a #=> 99
p a.object_id == b.object_id #=> true
0866デフォルトの名無しさん
2011/02/05(土) 17:39:250867デフォルトの名無しさん
2011/02/05(土) 18:24:00Matz神はかく語りき
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/1514
> これは間違い.rubyには値渡ししかなく引き数として与えられた変
> 数の値を変えても元の式の値は変わりません.ただし,オブジェク
> トの参照が渡るので値に対して破壊的な操作は可能です.
でも参照を渡してるんだから参照渡しじゃんという人が
いまだ絶たないので困っちゃうというお話
実際Cのポインタの値渡しを参照渡しと説明してる本は
名著とされる本の中にも結構あるからね
0868デフォルトの名無しさん
2011/02/05(土) 19:36:110869デフォルトの名無しさん
2011/02/05(土) 21:49:25メソッド呼び出し時に、レシーバを省略すると変数と紛らわしいという問題に対して、
常にレシーバを付ければいいという主張をする人もいるようですが、
Ruby習熟者の方が良しとしているのはどういうスタイルでしょうか。
常にレシーバを付ければいい、という主張に従うと、
単純にインスタンス変数にアクセスする際にもselfが付きまとうことになり
逆に可読性が落ちるように思います。
アクセサメソッドだけ例外にして他のメソッドにのみレシーバを付ける、
なんてルールを作ってしまうと更に悲惨なことになりそうです。
やはり省略できるものは省略してしまう方がスッキリするんでしょうか。
0870デフォルトの名無しさん
2011/02/05(土) 22:08:380871デフォルトの名無しさん
2011/02/06(日) 01:09:54命名が不適切なのかもしれない。リファクタリングを検討
通常、動詞的な命名をされるはずのメソッド名と、
名詞的な命名をされるはずの変数名(アクセサメソッド名)は混同されない
>常にレシーバを付ければいいという主張をする人もいる
初耳
0872デフォルトの名無しさん
2011/02/06(日) 01:19:50個人の好みにもよると思うが、レシーバは必要なければ
可読性のために省略する方が多数派
確かMatzもそっちを推奨してたと思う(ソース不明)
俺は、「レシーバを省略するとローカル変数と記法が被る」という点は
紛らわしさもあるものの、Rubyのメリットでもあると思ってるので
基本的にためらわず省略するようにしている
>>871
「単純なアクセサではないが名詞的な命名をするメソッド」というのもあるから
一概には言えない。Pathname#realpathとか
0873デフォルトの名無しさん
2011/02/06(日) 01:37:49ワロタ
もうこれテンプレに入れとけw
0874デフォルトの名無しさん
2011/02/06(日) 02:22:24それ以来railsのモデルクラス内でカラムにアクセスする時に常にself付ける癖がついた。
0875デフォルトの名無しさん
2011/02/06(日) 02:40:32海外のRuby本やRails本を読むと、
・selfは本当に必要なとき以外は付けない(省略できるときは必ず省略する)
・ローカル変数と紛らわしくても気にしない
・returnも書かない。return XXXとは書かずに XXX だけ。
という方針のようだ。
特に2番目は、ローカル変数と同じように見えるからいいのだとでもいいそうな
雰囲気がある。
def current_average
@data / @amount
end
def main
print current_average ← こんなやつね
end
0876デフォルトの名無しさん
2011/02/06(日) 03:01:28紛らわしいとかいう時点でウンチを書いてるんだと自覚すべし。
0877デフォルトの名無しさん
2011/02/06(日) 04:49:551.Rubyは値渡し(=引数として渡された変数の値を変えても元の値は変わらない)
2.ただしオブジェクトの参照の*値*が渡される(=オブジェクトの破壊的変更は可能)
1. hoge(hage) と呼ばれたとき hage = fuga としても呼び出し元の hage は壊れない
2. hoge(hage) と呼ばれたとき hage.hige = fuga とすると呼び出し元の hage が壊れる
っていう意味だから*値渡し*で問題ないんだけど
誤解されやすい表現だよね
0878デフォルトの名無しさん
2011/02/06(日) 05:01:00>実際Cのポインタの値渡しを参照渡しと説明してる本は
>名著とされる本の中にも結構あるからね
C++ で参照が導入される前に書かれた C の本ではそう書いてあっても全くおかしくない
0879デフォルトの名無しさん
2011/02/06(日) 06:11:13おっと、リアルじゃ恥ずかしくてうかつに口だせないかw
0880デフォルトの名無しさん
2011/02/06(日) 07:38:510881デフォルトの名無しさん
2011/02/06(日) 09:04:05Rubyではどうするのでしょうか?
my $x = 1;
{
my $x = 2;
}
print $x # => 1
0882デフォルトの名無しさん
2011/02/06(日) 10:00:440883デフォルトの名無しさん
2011/02/06(日) 10:21:30Proc作ってcallするという方法はある……けど、誰かが使ってるのは見たことない
たぶん、局所的に使いたい変数があるときには
メソッドに分割するだけで十分だからじゃないかな
0884デフォルトの名無しさん
2011/02/06(日) 10:24:450885デフォルトの名無しさん
2011/02/06(日) 10:31:40Rubyでは、命名規則やメソッド分割で対処するんですね。
了解しました。
0886869
2011/02/06(日) 13:10:16皆様ありがとうございました。勉強になりました。
省略できるselfは極力省略する、というスタイルで行くことにします。
アクセサとローカル変数の紛らわしさはやはり残りそうですが。。これも慣れるのかな
0887デフォルトの名無しさん
2011/02/06(日) 16:49:490888デフォルトの名無しさん
2011/02/06(日) 17:07:25書きやすさ・読みやすさと、間違いの少なさのトレードオフだよ
0889デフォルトの名無しさん
2011/02/06(日) 17:10:140890デフォルトの名無しさん
2011/02/06(日) 18:01:00ネット上にeruby.soが落ちてないので、からソースからコンパイルして使おうとしているのですが、
require "eruby"
compiler = ERuby::Compiler.new
で、(ちなみにこれは、modrubyに組み込まれている、eruby-runから抽出した箇所です。)
.../ruby187/lib/ruby/1.8/i386-mswin32_100/eruby.so: 127: The specified procedure could not be found. - Init_eruby (LoadError)
といったエラーが出ます。
どういう原因が考えられるでしょうか。
或いは、mswin32版のeruby.soを持っていらっしゃる方UPして頂けると幸いです。
0891デフォルトの名無しさん
2011/02/06(日) 18:17:23>>869と同じ罠に何度もハマってからPythonのself明示する考え方もありだなと思えてきた。
意図しない動作をするということならテストを書けばいい話だし、
ちょっとしたスクリプトならそれこそselfの明示は面倒だし
Rubyの方針もありだと思うけど
0892デフォルトの名無しさん
2011/02/06(日) 18:19:16erbじゃだめなのか?
0893デフォルトの名無しさん
2011/02/06(日) 18:27:00319;C:\Windows\Microsoft.NET\Framework\v3.5;C:\Program.obj' を開くことができませ
ん。
ってなコンパイルエラーがでたので、該当箇所っぽいところを
--- DLDFLAGS = -link -incremental:no -debug -opt:ref -opt:icf -dll $(LIBPATH)
+++ DLDFLAGS = -link -incremental:no -debug -opt:ref -opt:icf -dll
--- EXT_DLDFLAGS = -link -incremental:no -debug -opt:ref -opt:icf -dll $(LIBPATH)
+++ EXT_DLDFLAGS = -link -incremental:no -debug -opt:ref -opt:icf -dll
としたのがだめだったのでしょうか。。。
>>892
せっかくCのeRuby実装があるのでパフォーマンスのためにも、使ってみたいのです
0894デフォルトの名無しさん
2011/02/06(日) 18:40:13LIBPATH = "C:/Program Files/Microsoft Visual Studio 10.0/VC/LIB/"
or
LIBPATH = "C:\Program Files\Microsoft Visual Studio 10.0\VC\LIB\"
or
LIBPATH = "C:\Program Files\Microsoft Visual Studio 10.0\VC\LIB"
DLDFLAGS = -link -incremental:no -debug -opt:ref -opt:icf -dll $(LIBPATH)
LDSHARED = cl -nologo -LD
EXT_DLDFLAGS = -link -incremental:no -debug -opt:ref -opt:icf -dll $(LIBPATH)
などと直しても、
LINK : fatal error LNK1181: 入力ファイル 'C:/Program Files/Microsoft Visual Stud
io 10.0/VC/LIB.obj' を開けません。
となります。
0895デフォルトの名無しさん
2011/02/06(日) 21:43:350896デフォルトの名無しさん
2011/02/06(日) 23:43:19devkitでコンパイルしたほうが早そう
0897デフォルトの名無しさん
2011/02/07(月) 00:22:57cで実装されたerubyは遅いのでお勧めしない。まだerbのほうがまし。
0898デフォルトの名無しさん
2011/02/07(月) 01:28:29>>897
ありがとう。
しかし
ERBでもerubyでもロードの度にCPUが100%になる。。。
0899デフォルトの名無しさん
2011/02/07(月) 02:13:34確か特定のバージョンのRubyは糞だったはず
0900デフォルトの名無しさん
2011/02/07(月) 02:55:511.8.7です。
0901デフォルトの名無しさん
2011/02/07(月) 08:28:14すでに書かれてるけど、erubyはCで書かれているのに遅いし、print文を使っていて柔軟性に欠けるので、やめたほうがいい。
>>897
erbはファイルをrubyコードに変換する部分が遅いので、erubisのload_fileを使ったほうがいい。
eruby = Erubis::Eruby.load_file('example.rhtml')
print eruby.run(binding)
0902デフォルトの名無しさん
2011/02/07(月) 08:46:31ttp://twitter.com/idesaku/status/2719421881
0903デフォルトの名無しさん
2011/02/07(月) 16:24:21fruits = [['banana', 3], ['cherry', 2], ['banana', 1], ['apple', 4], ['banana', 5]]
fruits.sort{|a, b| ??? }
欲しい結果
[["cherry", 2], ["banana", 3], ["banana", 1], ["banana", 5], ["apple", 4]]
0904デフォルトの名無しさん
2011/02/07(月) 16:34:320905デフォルトの名無しさん
2011/02/07(月) 17:10:30fruits.each.with_index.sort {|a,b|
(b[0][0] <=> a[0][0]).nonzero? || a[1] <=> b[1]
}.map(&:first)
とか。
もっとスマートに出来そうだけど。
単なる数値じゃなくオブジェクトの配列をソートすることが多いRubyなのに
0907デフォルトの名無しさん
2011/02/07(月) 17:32:38http://redmine.ruby-lang.org/issues/show/1089
0908デフォルトの名無しさん
2011/02/07(月) 18:02:48酷い脊髄反射レスだなこりゃ
0909デフォルトの名無しさん
2011/02/07(月) 18:18:04ありがとうございます。
期待通りの動作が得られました。
0910デフォルトの名無しさん
2011/02/07(月) 18:22:36こんなんとか?まだ分かり辛い気もする
0911デフォルトの名無しさん
2011/02/07(月) 18:30:020912デフォルトの名無しさん
2011/02/07(月) 18:31:29そいでマップしてソートしてリバースしてマップして(ry
みたいな気が狂ったようなコードを書いちゃう。
0913デフォルトの名無しさん
2011/02/07(月) 18:41:470914デフォルトの名無しさん
2011/02/07(月) 19:52:190915デフォルトの名無しさん
2011/02/07(月) 20:17:23Rubyではお手軽に書けるけど、他のLLだと「やりたくても、できない」からね
いわゆる「酸っぱい葡萄」かな?
0916デフォルトの名無しさん
2011/02/07(月) 22:00:240917デフォルトの名無しさん
2011/02/07(月) 22:17:42メソッドと記号の意味を追えば分かる
俺でも分かったんだから大丈夫
0918デフォルトの名無しさん
2011/02/07(月) 23:20:20# フルーツと添字をペアにして、配列arrに格納
arr = []
fruits.each_with_index {|x, i| arr << [x, i] }
# 比較方法を指定してソート
arr.sort! {|pair1, pair2|
# フルーツの名前で比較
val = pair2.first[0] <=> pair1.first[0]
# それが同じだった場合にのみ、添字で比較
val != 0 ? val : pair1.last <=> pair2.last
}
# フルーツだけを取り出す
p arr.collect {|pair| pair.first }
ここで、
arr = []
fruits.each_with_index {|x, i| arr << [x, i] }
が、905では
fruits.each.with_index
となっていて(これは1.9での書き方かな?)、
val = pair2.first[0] <=> pair1.first[0]
val != 0 ? val : pair1.last <=> pair2.last
が905では
(pair2.first[0] <=> pair1.first[0]).nonzero? || pair1.last <=> pair2.last
となっているわけだね。なるほど。nonzero?なんて初めて知った。
ttp://www.ruby-lang.org/ja/man/html/Numeric.html#nonzero.3f
0919デフォルトの名無しさん
2011/02/08(火) 00:10:12fruits.shuffle!
if fruits[0] >= fruits[1]
if fruits[1] >= fruits[2]
if fruits[2] >= fruits[3]
if fruits[3] >= fruits[4]
if fruits[4] >= fruits[5]
break
end
end
end
end
end
end
0920デフォルトの名無しさん
2011/02/08(火) 00:38:04array.shuffle! until array.each_cons(2).all? {|a,b| a < b }
# 1行ver.
0921デフォルトの名無しさん
2011/02/08(火) 00:46:37fruits.sort_by{|v| [v[0].bytes.map(&:-@),i+=1]}
0922デフォルトの名無しさん
2011/02/08(火) 01:35:11ワラタw
0923デフォルトの名無しさん
2011/02/08(火) 03:07:090924デフォルトの名無しさん
2011/02/08(火) 03:08:12それを言うなら無限の猿
無限の猿定理 - Wikipedia
http://ja.wikipedia.org/wiki/%E7%84%A1%E9%99%90%E3%81%AE%E7%8C%BF%E5%AE%9A%E7%90%86
0925デフォルトの名無しさん
2011/02/08(火) 06:32:590926デフォルトの名無しさん
2011/02/08(火) 06:44:02fruits.sort_by.with_index{|v,i| [v[0], i]}
Enumerator#with_indexの真骨頂
0927デフォルトの名無しさん
2011/02/08(火) 07:01:15降順じゃないじゃん
0928デフォルトの名無しさん
2011/02/08(火) 07:15:00なかったことに
fruits.sort_by.with_index{|v,i| [v[0], -i]}.reverse
0929デフォルトの名無しさん
2011/02/08(火) 07:27:480930デフォルトの名無しさん
2011/02/08(火) 08:01:120931デフォルトの名無しさん
2011/02/08(火) 08:19:47instance method Enumerable#sort_by
http://doc.ruby-lang.org/ja/1.9.2/method/Enumerable/i/sort_by.html
i = 0
fruits.reverse.sort_by {|v| [v[0], i += 1] }.reverse
0932デフォルトの名無しさん
2011/02/08(火) 08:26:30>>928みたいに、インデックスをマイナスにすれば、最初のreverseがいらないね。
俺も脊髄反射だw
i=0
fruits.sort_by {|v| [v[0], -(i += 1)] }.reverse
0933デフォルトの名無しさん
2011/02/08(火) 08:33:55連投すまそ。
i=0
fruits.sort_by {|v| [v[0], i -= 1] }.reverse
0934デフォルトの名無しさん
2011/02/08(火) 08:54:530935デフォルトの名無しさん
2011/02/08(火) 09:41:330936デフォルトの名無しさん
2011/02/08(火) 09:45:54これで思い出したけど円周率3.14...のなかにはどんな数字の組み合わせも入ってる可能性があるらしいね
例えば、人の名前を数字に当てはめてそこに生年月日とか生まれた時間とかくっつけたのを絶対見つけることができるらしい
それなら未来のこともどうにか数字にしてわかるんじゃね?って研究してる人の話を聞いたことがある
0937デフォルトの名無しさん
2011/02/08(火) 09:53:02「絶対見つけることが出来る」という結論は出ないと思う
円周率に0が100個続く列があるか、ってのは証明が難しいんじゃなかったか
0938デフォルトの名無しさん
2011/02/08(火) 09:54:07sort(:stable => true){|a| a<=>b }
sort(:method => :merge){|a| a<=>b }
0939デフォルトの名無しさん
2011/02/08(火) 10:07:16ごめんスレ違いなんだけど
その研究者が講演とかをやってそれを実演してるらしい
そこに用意してある円周率はたった数千〜万桁?ほどなんだけど
希望者の名前と生年月日の組み合わせは100%あるとのこと
0940デフォルトの名無しさん
2011/02/08(火) 10:08:21limit = 5
loop do |i|
break if i > limit
end
0941デフォルトの名無しさん
2011/02/08(火) 10:14:29limit = 5
i = -1
while true
i += 1
break if i >= limit
do_something
end
まあこれなら
i = -1
while (i += 1) < limit
do_something
end
だな
0942デフォルトの名無しさん
2011/02/08(火) 10:17:13名前をどういうふうに数字にしてるのかしらないけど、
単純に確率の問題。
0が100個だと、10の100乗ぶんの1の確率だから、10の100乗桁あれば、
あってもおかしくない。そんだけ。
0943デフォルトの名無しさん
2011/02/08(火) 10:31:18d
0944デフォルトの名無しさん
2011/02/08(火) 10:53:10リファレンスマニュアルにも書いてるけど、安定じゃないよ。
sort_by 使ってる例は i が肝。
0945デフォルトの名無しさん
2011/02/08(火) 10:56:39それ無限に見えないけど、こんな感じ?
5.times do |i|
end
0946デフォルトの名無しさん
2011/02/08(火) 11:07:02何回か話題になってた記憶がある
0947デフォルトの名無しさん
2011/02/08(火) 11:19:230948デフォルトの名無しさん
2011/02/08(火) 11:21:44そのときの結論はどうだったの?
ググったらこんな方法があったけど。
enum_for(:loop).with_index do |_, i|
break if i > limit
end
こんなんとかどうだろうか?
0.upto(Float::INFINITY) do |i|
break if i > limit
end
0949デフォルトの名無しさん
2011/02/08(火) 12:52:10元のloop置き換えちゃっていいじゃね理論
def loop
return unless block_given?
i = -1
yield i += 1 while true
end
loop{|i|
break unless i < 10
puts i
}
loop{
puts "#"; sleep(0.1);
}
0950デフォルトの名無しさん
2011/02/08(火) 15:17:21Enumeratorを外部イテレーターとしてまわすときにloopと組で使うわけです
counter = 5.times
loop do
p counter.next
end
while true
p counter.next #whileだと例外でエラー終了
end
0951デフォルトの名無しさん
2011/02/08(火) 15:23:160952デフォルトの名無しさん
2011/02/08(火) 15:52:38自分でStopIteration例外を補足する必要があります
カウンター付きloopの提案
引数つけたときだけカウンター回せばいいんじゃないだろうか
これなら既存の使い方のパフォーマンスも落ちないはず
ついでにEnumeratorも生成できれば便利なのでは
引数は succできるやつとEnumeratorのみ受け付けれられればいいかな
でも、名前がだめだめなのでまったく採用の見込みは無さそう
loopにはカウンターをまわすイメージが無いので
0953デフォルトの名無しさん
2011/02/08(火) 15:54:52def loop(counter = nil)
raise TypeError unless counter.nil? or counter.respond_to?(:succ) or Enumerator === counter
return enum_for(:loop,counter) unless block_given?
case
when counter.nil?
orig_loop{ yield }
when Enumerator === counter
orig_loop{ yield counter.next }
when counter.respond_to?(:succ)
orig_loop{ yield counter; counter = counter.succ }
end
end
limit = 5
i = 0
loop(1){|n| p n; break if (i+=1) >= limit}
i = 0
loop('a'){|n| p n; break if (i+=1) >= limit}
i = 0
loop((1..3).each.cycle){|n| p n; break if (i+=1) >= limit}
endless_counter = loop(0)
0954デフォルトの名無しさん
2011/02/08(火) 18:13:02loop.with_index{|_,i| p i }
とかできるんだなw初めて知った
0955デフォルトの名無しさん
2011/02/08(火) 18:49:36サーバ(CentOS5)のRubyが1.8.5だったときの絶望感ったらないね。
0956デフォルトの名無しさん
2011/02/08(火) 18:50:35どういう仕組みなの?それ
0957デフォルトの名無しさん
2011/02/08(火) 19:13:42おおー、ブロックなしだと、Enumeratorを返すようになったんだ。
0958デフォルトの名無しさん
2011/02/08(火) 20:05:33[nil].cycle と同じだし
p loop.take(5) #=> [nil, nil, nil, nil, nil]
p [nil].cycle.take(5) #=> [nil, nil, nil, nil, nil]
無限nil列って使い道あるのか?
with_indexしたところで、余分なnilが付いてくるし
0959デフォルトの名無しさん
2011/02/08(火) 20:41:56おいやめろ
0960デフォルトの名無しさん
2011/02/08(火) 22:57:000961デフォルトの名無しさん
2011/02/08(火) 23:13:390962デフォルトの名無しさん
2011/02/09(水) 01:05:19初期値を比較的安全に設定するために、指定された初期値を dupして代入しようとしましたが、
初期値が数値などの場合 dup で例外が発生します。
respond_to? でdupできるかどうか判別できるかとも思いましたが、dup できなくても true が返ってきます。
今は仕方がないので例外を捕捉して例外時はそのまま代入していますが
0963デフォルトの名無しさん
2011/02/09(水) 01:40:36xml = open(headline_url)
aa = REXML::Document.new(xml).root
このコードでxmlに<とか>が入ってるとパースエラーになってしまうんですがどうすればいいでしょうか
0964デフォルトの名無しさん
2011/02/09(水) 02:18:26ねとらじの運営にゴルァするのがベストかと
well-formedなXMLを送ってこいと
0965デフォルトの名無しさん
2011/02/09(水) 02:27:09xmlの必須要素である<>があるとエラーなんて、ライブラリとしてあってはならないバグだ
即刻バグ報告すべき
0966デフォルトの名無しさん
2011/02/09(水) 02:30:11ちゅっちゅ
0967デフォルトの名無しさん
2011/02/09(水) 07:43:46すみません勘違いでした
ちなみ>>963でかってに変換されてるんですけど>は&gt;、<は&lt;になっていて問題無いみたいです
実際は唐竍鰍ンたいな機種依存文字が入ってるいるとエラーになっています
0968デフォルトの名無しさん
2011/02/09(水) 09:09:14>>1
> ■質問する人へ
0969デフォルトの名無しさん
2011/02/09(水) 09:40:46・ dup も clone も浅いコピーであることについてここに判子押した上で実際に dup して rescue する
・ コストが高いことを理解した上で Marshal.load(Marshal.dump(arg)) する
・ 引数を複製しないと安心できないというのは70パーセントくらいの割合でデザインミスなので考え直す
お好きなものを張り切ってどうぞ
0970デフォルトの名無しさん
2011/02/09(水) 10:18:41headline_url = "http://yp.ladio.livedoor.jp/stats/list.xml"
xml = open(headline_url).read
xml = xml.sub!(/encoding="shift-jis"/){'encoding="CP932"'}
aa = REXML::Document.new(xml).root
でどうだ
0971デフォルトの名無しさん
2011/02/09(水) 10:22:58headline_url = "http://yp.ladio.livedoor.jp/stats/list.xml"
xml = open(headline_url).read
xml.sub!(/encoding="shift-jis"/){'encoding="CP932"'}
aa = REXML::Document.new(xml).root
もし使ってる iconv が Windows-31J を解釈できる非公式 iconv なのなら
指定するのは CP932 ではなく Windows-31J のほうがいい
もし、CP932 を指定しても Iconv::IllegalSequence の例外が出てしまう場合は…
0972デフォルトの名無しさん
2011/02/09(水) 10:34:28encoding="shift-jis" って宣言したなら Shift_JIS 以外の文字は入れないで頂きたい
@ABとか鰍ニかとかご法度
本当は REXML::Document.new(xml, :encoding=>'CP932') とか指定できるのが望ましいんだけど
そういう構造にはなってないなさすが原産地外国
ちなみに Nokogiri だと Nokogiri::XML.parse(xml, nil, 'CP932') で動作する
0973デフォルトの名無しさん
2011/02/09(水) 16:08:22ありがとうございます解決しました
機種依存文字は意識したこと無かったので勉強になりました
>>968
すいません気をつけます
0974デフォルトの名無しさん
2011/02/09(水) 19:23:39反応ありがとうございます。
3番目の設計見直しでいきます。
1番目は今のやり方です。浅いコピーだということは承知しておりまして、比較的安全にと書いたのはそういう意味です。言葉足らずでしたね
2番目、今回例外処理のコスト高を何とかしたいというのが動機でしたので。
active_supportではduplicable?を定義してますね。姑息な手段に思えます。ruby本体でサポートして欲しいなあ
0975デフォルトの名無しさん
2011/02/09(水) 19:34:16昨日見たときは "\x13" だかの変な制御コードがあって引っかかってたけど、今日見たら無くなってた
0976デフォルトの名無しさん
2011/02/10(木) 00:12:01スレ内容が全く理解できないという。
0977デフォルトの名無しさん
2011/02/10(木) 00:27:44if hoge && hoge.isXXX?
こんな操作を毎回やっているのですが、rubyらしい手法はありますか?
設計が悪いとかnullObject使えとかそういう感じなんでしょうか
0978デフォルトの名無しさん
2011/02/10(木) 00:38:00だせえ!やーいやーい!
0979デフォルトの名無しさん
2011/02/10(木) 00:44:59お前童貞だろ
0980デフォルトの名無しさん
2011/02/10(木) 00:50:57if param.is_foo? といきなり書くと param が nil だった場合 NoMethodError になってしまう
かと言って if param && param.is_foo? と書くのは正しいのだが冗長に見えて仕方がない
なんとかする方法はありませんか?
というような質問はしょっちゅう出るのだが、汎用な回答はない
if param && param.is_foo? と書くようにするのがいちばん無難
あとは NoMethodError が出ることを駄目データが出たメッセージとして許容するとか
0981デフォルトの名無しさん
2011/02/10(木) 01:28:45nullを返す場合があるメソッドを読んだ時にだけチェックすればいいのだ。
0982977
2011/02/10(木) 02:36:28なるほど、まあ無難と言われてちょっと安心です。
methodや機能それぞれについてアサーション(一般的な意味を含む)
をしっかり考えてそれを前提にすれば、nullチェックなどいちいち書かなくてもいい
という意見にも納得です。
0983デフォルトの名無しさん
2011/02/10(木) 02:37:020984デフォルトの名無しさん
2011/02/10(木) 02:56:35無意味なnilチェックでバグを見逃すことになる。
0985デフォルトの名無しさん
2011/02/10(木) 04:03:48nil が起こす NoMethodError はかなり特別だ
たいていの Ruby プログラマは、これを「nil かどうかチェックして分岐しとけよ糞が」とは思わない
むしろいわゆるシグナルとして残す
ホントは nil が起こす NoMethodError は特別扱いして名前付けて欲しいんだけども
0986デフォルトの名無しさん
2011/02/10(木) 05:00:38> nil が起こす NoMethodError はかなり特別だ
はあ?
> ホントは nil が起こす NoMethodError は特別扱いして名前付けて欲しいんだけども
はあ?
自称上級者気取りが初心者を混乱させるのはやめてほしいな
0987デフォルトの名無しさん
2011/02/10(木) 06:29:01息が臭いだけ。
0988デフォルトの名無しさん
2011/02/10(木) 07:52:310989デフォルトの名無しさん
2011/02/10(木) 07:54:13たいていis無しのxxx?にする
0990977
2011/02/10(木) 08:39:20?そのものはboolを返すという記号としては有りだと思うけど。
0991デフォルトの名無しさん
2011/02/10(木) 11:48:13Java だと、ぬるぽだな。これが一番わかりやすいかな。
C だとSegmentation fault になる。
segmentatino fault だと色々原因がありそうだけど、殆どがぬるぽなんだよな。
0992デフォルトの名無しさん
2011/02/10(木) 12:01:30ものによっては rescue で自前の例外を発生させてユーザーにわかりやすく知らせたりもするぬ
0993デフォルトの名無しさん
2011/02/10(木) 12:20:1435分になっても立ってなかったら失敗なので次の人どうぞ
0994デフォルトの名無しさん
2011/02/10(木) 12:30:420995デフォルトの名無しさん
2011/02/10(木) 12:33:040996デフォルトの名無しさん
2011/02/10(木) 12:36:140997デフォルトの名無しさん
2011/02/10(木) 12:51:350998デフォルトの名無しさん
2011/02/10(木) 13:09:530999デフォルトの名無しさん
2011/02/10(木) 13:10:341000デフォルトの名無しさん
2011/02/10(木) 13:12:4010011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。