Ruby 初心者スレッド Part 55
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2014/06/21(土) 23:39:44.94ID:rKd1VvW8質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
RoRはスレ違いよ
前スレ
Ruby 初心者スレッド Part 54
http://peace.2ch.net/test/read.cgi/tech/1392598207/
るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
逆引きRuby
http://www.namaraii.com/rubytips/
0133デフォルトの名無しさん
2014/07/20(日) 23:58:13.27ID:BWtO9PBt0134デフォルトの名無しさん
2014/07/21(月) 01:10:13.39ID:15AfdAD4http://takuya-1st.hatenablog.jp/entry/20110717/1310890039
0135デフォルトの名無しさん
2014/07/22(火) 20:19:49.75ID:E9EuZoOu[x, y, z] = euclid(x)
のようにデータを代入する方法はないでしょか?
今のところ、
data = euclid(x)
x = data[0]
y = data[1]
z = data[2]
と書いています
もうちょっとわかりやすい書き方があれば教えて下さい
0136デフォルトの名無しさん
2014/07/22(火) 20:24:38.12ID:RgZSUrOG0137デフォルトの名無しさん
2014/07/22(火) 20:51:15.29ID:E9EuZoOu[]括弧がいらないだけでできたんですね
教えて下さりありがとうございます
0138デフォルトの名無しさん
2014/07/23(水) 01:47:58.13ID:C1MAaOhXputs start - Time.now
これの結果が0.052003だった場合、0.05秒、つまり50ミリ秒ということですか?
0139デフォルトの名無しさん
2014/07/23(水) 02:02:06.43ID:vbN86xg+http://docs.ruby-lang.org/ja/2.1.0/method/Time/i/=2d.html
0140デフォルトの名無しさん
2014/07/24(木) 22:48:33.94ID:QzlnANU70141デフォルトの名無しさん
2014/07/24(木) 22:53:34.81ID:mk/qqxYw0142デフォルトの名無しさん
2014/07/24(木) 23:23:04.40ID:TORgOaiDOSX(Mac) なら、Finder 上のフォルダをターミナル画面へドロップすると、
そのフォルダの UNIX ディレクトリパスが入力される
だから、ターミナルでは cd とだけ打てばいい
あと Linux や OSX 等を含む UNIX の対話環境だと、シェルがディレクトリ名や
ファイル名を補完してくれるから、プロジェクトの構成が整理されていれば
先頭の数文字を打って後はシェルの補完に頼ることができる
だからタイピングが苦手でも、環境に慣れればそれほど苦痛とは感じなくなる(はず)
0143デフォルトの名無しさん
2014/07/25(金) 00:24:45.92ID:M5DbZg9u1つしかないってことはそれが入ってるディレクトリは1つだけだろうし、
rubyコマンドに指定するファイル名も1つだけのはずである
つまり1回だけコマンドプロンプトを起動してファイル置き場に1回だけ移動して
ファイル編集したあと1回だけファイル名をrubyコマンドの引数に入力して実行すればいい
どれも1回だけだ
もういちど実行したい場合はコマンドプロンプトのヒストリ機能で呼び出してEnterすればよろしい
キーボードの上矢印で順番に出てくる
下手にマウスとか使おうとすると煩雑で死ぬのでキーボード使うこと
0144デフォルトの名無しさん
2014/07/25(金) 00:40:14.11ID:mPXiIZE+楽をしたいだけなら実行までできるIDEを使えば。
楽をするための苦労を厭わないなら、簡単にcdとかできる、しなくてもいい方法を考えたら。
いい勉強になるだろう。
0145デフォルトの名無しさん
2014/07/25(金) 01:28:52.03ID:c73V3zd5Windowsもコマンドプロンプトにフォルダをドロップすると
フルパスが入力されるので>>142と同じようなことができる
Rubyスクリプトを置くディレクトリで開くコマンドプロンプトの
ショートカットを作るとか、バッチでディレクトリ移動するという
手もある
0146デフォルトの名無しさん
2014/07/25(金) 11:39:04.68ID:3IqFdEs5言語問わずそこで作業
ちゃんと開発する時は普通に別ディレクトリで
0147デフォルトの名無しさん
2014/07/25(金) 12:14:05.15ID:Yo6Sfo//最近のウィンドウズ知らないけどコマンドプロンプトが
「処理終了したら閉じる」という設定になっているのでは?
閉じる設定でなければ毎回cdしなくてもいけるんじゃないかな
0148デフォルトの名無しさん
2014/07/25(金) 12:18:27.19ID:WLh8J9pC0149デフォルトの名無しさん
2014/07/25(金) 12:37:18.84ID:LKOgwVhO編集中のファイルのパスを作業ディレクトリとして
コマンドプロンプトを起動してくれると思う
0150デフォルトの名無しさん
2014/07/25(金) 13:11:43.10ID:hJipNkKCエクスプローラで任意のフォルダ開いでのアドレスバーにcmdって打ち込むと
そのフォルダに移動した状態でコマンドプロンプトが開く
0151デフォルトの名無しさん
2014/07/25(金) 13:13:04.77ID:hJipNkKC直接irbとか打ち込んでもok
0152デフォルトの名無しさん
2014/07/25(金) 13:27:45.66ID:WLh8J9pCほんとだ
知らなかった
ありがとう
2ちゃんもたまには役に立つんだぬ
0153デフォルトの名無しさん
2014/07/25(金) 13:29:21.50ID:WLh8J9pCそのディレクトリで管理者権限で cmd 立ち上げられませんか?
0154デフォルトの名無しさん
2014/07/25(金) 13:29:59.63ID:WLh8J9pC0155デフォルトの名無しさん
2014/07/25(金) 13:31:44.65ID:WLh8J9pC0156デフォルトの名無しさん
2014/07/25(金) 13:39:26.35ID:mmV7Js8i0157デフォルトの名無しさん
2014/07/25(金) 13:48:34.63ID:WLh8J9pC0158デフォルトの名無しさん
2014/07/25(金) 13:49:32.42ID:WLh8J9pC0159デフォルトの名無しさん
2014/07/25(金) 14:46:56.21ID:9RAl771B0160片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0
2014/07/25(金) 16:01:49.83ID:Snct3h9Ba = b
end
x = 1
y = 2
f x,y
p x,y #=>1,2
関数fの中でxを書き換えたいんだが、どうすんねん?
0161デフォルトの名無しさん
2014/07/25(金) 16:55:52.79ID:5HeCUYeT・配列に入れて渡し、配列を書き換える
・インスタンス変数ならば、オブジェクトごと渡して変更メソッドを呼ばせる
・そのメソッドがその場でしか使わないのであれば、ブロックにして外の変数を書き換える(ブロック突入前に存在しなければ初期値を入れておく)
・変更するくらいなら、戻り値として返す
Cと違って、多重代入もあるし配列だってHashだって戻せるんだから
無理して書き換える必要性は無く、返せば良いと思うぞ
0162123
2014/07/25(金) 18:20:34.37ID:7iMP+P1BA(){
変数a
return B(){}
}
結局、クロージャ・ラムダ・匿名クラスなどは、
色々難しい名前を付けたが、クラスなんだよな
クラスAには、メンバ変数a, メンバ関数Bがあるだけ
0163デフォルトの名無しさん
2014/07/26(土) 02:02:24.33ID:8QVtVKLI0164デフォルトの名無しさん
2014/07/26(土) 02:46:01.98ID:zIbYZCVC0165デフォルトの名無しさん
2014/07/26(土) 03:08:33.22ID:2fRRiDMt0166デフォルトの名無しさん
2014/07/26(土) 17:21:34.64ID:L52INrm9WindowsAPIのGetModuleFilenameを叩くのが一番確実だ。
0167デフォルトの名無しさん
2014/07/26(土) 18:07:18.57ID:2fRRiDMt0168デフォルトの名無しさん
2014/07/26(土) 22:26:20.20ID:c/LX3X4p驚き最小の原則なるものとは真逆を行く言語だよ
驚き最小ってPythonみたいなののことを言うんだよ
0169デフォルトの名無しさん
2014/07/26(土) 22:40:13.26ID:+1COesfI>>57
0170デフォルトの名無しさん
2014/07/27(日) 01:09:12.69ID:YDU+iIQK0171デフォルトの名無しさん
2014/07/27(日) 01:13:04.51ID:yFRKgWmm0172デフォルトの名無しさん
2014/07/27(日) 13:35:49.37ID:UMDAGQ8D/ _ _ ',
_| / ・ ヽ /・ ヽi
{ し―J し‐ J|
>‐ 、 「 ̄匚} ̄匚lい
, -―‐< ̄ ̄ ̄ ̄\____ } }
/ ̄ ̄\___ `ヽ /´ ハ \//
/ `ヽ | |ニニニニ ′
| y | |___j⌒ヽ
| | 7 |____/厶ノ
\ ヘ �h ∧_/
. ヽ ヽ l_/
ハ ', |`ヽ
(__}__レ ――┴ァ′
. Y⌒V⌒ヾヽ ー-|
! ! | { ー}
. ヽ_ヽ_ヽ_〉‐''´
0173デフォルトの名無しさん
2014/07/30(水) 21:35:33.47ID:ucnjA6/+http://qiita.com/icoxfog417/items/e8f97a6acad07903b5b0
Pythonは何かとトラップが多い言語で、
引っかかるとなんてゴミ言語と感じてしまうことが少なからずある
要するに Python への批判記事である訳だけど、
この記事の視点を Ruby に当てはめてみよう
・ファイルのエンコードを宣言する必要がある
Ruby => Ruby 1.9 でこのゴミ仕様が取り込まれて危うかったけど、
Ruby 2.0 ではデフォが UTF-8(Unicode) になってゴミを排除できた
・文字列には通常の文字列とユニコード文字列がある
Ruby => Ruby では最初から(少なくとも Ruby 1.4 の時代から)一般的な文字列は
多言語化に対応した String クラス、ただ一つだけしか存在していません
・割り算の結果がfloat型にならない
Ruby => 「強い型付け」による動的型付け言語である Ruby からすれば、
この指摘そのものが規約違反であって、1 / 3 は 0 で 3 / 2 は 1 になるのが自然であり、
もしfloat型が必要であれば、たとえば 1.to_f / 3 のように明示的に型変換すべきと考えます
おそらく著者は「弱い型付け」による動的型付け言語である JavaScript の経験が
長いのでこのような不満を感じたのでしょう、JavaScript は Python 3 と同じ結果になります
js> 1/3
0.3333333333333333
js> 3/2
1.5
そして、Python 3 は「弱い型付け」に向かって変化したのですから、
次の Python 4 では、おそらく以下のような実行結果へと仕様改訂されることでしょう(棒
>>> "A"+1
'A1'
(長いので、一旦ここで切る)
0174デフォルトの名無しさん
2014/07/30(水) 21:54:15.22ID:cG7xMHTs0175デフォルトの名無しさん
2014/07/30(水) 22:17:39.92ID:+YSZmqYf型付けの強い弱いは関係ない
演算の自動リフトや型変換なんてC系の言語では普通にあることで
動的型言語ではそのルールの適用をコンパイル時ではなく実行時の型に応じて動的に行ってるだけ
また、JavaScriptに整数型は仕様上ない
0176デフォルトの名無しさん
2014/07/30(水) 22:45:41.48ID:+YSZmqYf・オペランドや結果の型が静的に決まらない
・オペランドの型によって演算子の意味が変わる
例えば、JavaScriptは実行してみなければ+が加算になるのか文字列連結になるのか分からないでしょ。
そういう性質を便宜的に「型付けが弱い」と表現することがある。
その観点では1.0/3と1/3で結果が同じになるPython3の仕様の方が「型付けが強い」と考えることもできる。
0177デフォルトの名無しさん
2014/07/30(水) 23:33:27.95ID:cG7xMHTsない。きちんと意味が定義されてる言葉を俺様意味付けして使うな。
> その観点では1.0/3と1/3で結果が同じになるPython3の仕様の方が「型付けが強い」と考えることもできる。
デタラメな足場の上からの観点ですね。
0178デフォルトの名無しさん
2014/07/30(水) 23:43:44.39ID:ucnjA6/+Ruby => CLOS や Smalltalk と同様な動的型付け/動的メソッド束縛方式の
オブジェクト指向言語として設計されたRubyのクラス定義スタイルは、
最初から(少なくとも Ruby 1.4 の時代から)変更がありません
Python に関しては、もともと手続き型言語として設計されたものに後から
オブジェクト指向を付け足す際、開発チームの「オブジェクト指向への理解不足」によって
静的型付け/静的メソッド束縛言語のオブジェクト指向を導入したという「過ち」がありました
結果として、リフレクションを多用する最近のメタプログラミング・スタイルに追従できず、
旧スタイルを排除して新スタイルに「改めざるをえなかった」のだと思われます
・コンストラクタ(と思われるもの)が2つある
Ruby => 最初からオブジェクト指向言語として設計された Ruby では、
コンストラクタは Class.new、イニシャライザは Object#initialize と
明確に区別されていますから、「可読性に劣る Python 」のような混乱はありません
・PrivateやProtectedがない
Ruby => Ruby にはメソッドの可視性を指定する private や protected があります
(ただし、個人的にはこれら可視性を宣言するよりも、public メソッドの名前の
前(または前後に) '_' あるいは '__' を付けるスタイルを好みます )
また Ruby には名前の先頭に付ける '_' や '__' について、言語としての「強制」は無く、
命名スタイルはプログラマの判断に委ねられています
・メソッドの第一引数が予約されている
Ruby ==> 最初からオブジェクト指向言語としている Ruby では、(コードが self だらけに
なってしまう)「Python のような冗長で可読性に劣る規約の強制」はありません
Smalltalk と同様に、メソッド呼び出し先として自身を「明示したい時にだけ」
疑似変数 self を、親クラスを「明示したい時にだけ」疑似変数 super を書くだけです
(まだ続くが、次で終わる予定)
0180デフォルトの名無しさん
2014/07/31(木) 00:06:25.30ID:I9wcB7pD擬似privateで実質protectedの特殊形、なprivateはともかく
protectedとpublicは普通に使うと思うんだが…
0181デフォルトの名無しさん
2014/07/31(木) 00:41:24.92ID:IjpkEocsこれがやってること見ればわかるだろ、愚問
0182173
2014/07/31(木) 01:25:29.27ID:h0+6R2oI・メソッドのオーバーロードができない
Ruby => (Python や JavaScript と同様に)動的型付け言語である Ruby では、
引数のデータ型を実行時に判別(イントロスペクション)できるので、
メソッドのオーバロード(多重定義)は「必須ではない」と思います
・ファイルで名称空間が切られる
Ruby => Ruby ではモジュール宣言を使って名前空間が切られますから、
ファイルと名前空間との一致という「規則を強制する Python」とは異なり、
名前空間というプログラムの階層的な論理構造と、ファイル/ディレクトリという
プログラムの階層的な物理構造をプログラマが自由自在に表現できます
・for文にindexがない
Ruby => これも >>173 にある「割り算の結果」の項目と同様に、著者がC言語風の
indexを伴うfor文がある JavaScript の経験が長いので、不満に感じるのだと思われます
Ruby だと、index を伴う反復を以下のように書きます
list.each_with_index do |index, value|
puts "index:" + index.to_s
end
また Ruby 1.9 からは Enumerator オブジェクトとメソッド with_index が追加されたので、
関数型プログラミングのスタイルでコードを書くこともできるようになりました
puts list.each.with_index.map { |index, value| "index:" + index.to_s }
・配列/リストの長さはlenでとる
Ruby => 最初からオブジェクト指向言語として設計されているので、
配列の長さを求めるにはメソッド Array#length を使って list.length と書けます
これについては、すでに >>57 で解説しているので、ここでの詳細は省略します
(これで終わり、ここまでの連投カキコに対するレスは、明日になる)
0183デフォルトの名無しさん
2014/07/31(木) 01:33:39.66ID:YSTj81JP0185173
2014/07/31(木) 21:59:08.98ID:h0+6R2oIまず「JavaScriptに整数型は仕様上ない」という指摘は正しい
(ボケへの的確なツッコミが嬉しい)
ただし、それ以外の部分はメチャクチャだね
> 演算子を適用した結果の型がどうなるかは演算子の仕様の問題に過ぎず
> 型付けの強い弱いは関係ない
演算子(= 関数 or メソッド)の適用結果のデータ型が曖昧である事を許容する言語は、
曖昧なデータ型を禁止する言語と比較して「型付けが弱い」と呼ばれる
たとえばC言語では戻り値が「ある(オブジェクトへのポインタ) または NULL」という仕様の
関数定義を許すけど、ML や Haskell のような型付けに厳格な言語では型エラーとして
定義できず、代わりに直和型(ML ならOption型、Haskell ならばMaybe型)を使う
この対比のケースだと、C は ML や Haskell よりも「型付けが弱い」となる
つまり、データ型に関する仕様の曖昧さを認めるか否かという言語の設計方針は、
「型付けの強さ弱さ」を決める要因の一つである、ってこと
> 演算の自動リフトや型変換なんてC系の言語では普通にあることで
そういった「暗黙の型変換(implicit conversion)」あるいは「型強制(coercion)」と
呼ばれる仕掛けはプログラミングを楽にする効果がある一方で、
その多用は型検査の能力を阻害する悪影響がある
だから、それらを許可しない型付けに厳格な言語との対比として、
C言語系は「型付けが弱い」と呼ばれる
0186173
2014/07/31(木) 22:43:50.19ID:h0+6R2oI>演算による自動型変換が問題になりうるのは、次の両方を満たす場合だ。
発想の方向性は正しいと思うから、思考をもう一歩先に進めよう
言い換えると、「型が静的に決まらない」や「型によって演算子の意味が変わる」といった
要因は、どのような効果を導くのか?を考えてみよう、ってこと
その答えは、プログラマの(データ型に関する)誤り(=エラー)を見逃す可能性を増やす、
簡潔に言えば「型検査の能力を阻害する」ってこと
たとえば JavaScript のコード "A"+1 は、プログラマが "A1" が返る事を意図していたなら
正当で簡潔なコードだけど、もしもうっかり "1" をタイプミスしたとしたら
JavaScript処理系はミスの検出を見逃して最終的に予期しないバグとなる可能性がある
この「プログラマの表現力への制約を極力減らしつつ強力な型検査能力を提供する」ことは、
型体系(type system)の研究における重要な動機の一つになっている
> その観点では1.0/3と1/3で結果が同じになるPython3の仕様の方が
>「型付けが強い」と考えることもできる。
上で述べたように、型付けの強さ弱さとは、一般には型検査能力の程度を指す
(ただし「型検査」そのものが広い概念を指す曖昧な言葉であることに注意が必要)
このような「1.0/3と1/3で結果が同じになる」という、計算結果の同値性が
型付けの強さ弱さを決めるなどという珍説は、これまで見たことも聞いたことも無い
型付けの強さ弱さに関しては、Wikipedia に良くまとめてあるので、勉強されることを勧める
・Strong and weak typing - Wikipedia, the free encyclopedia
http://en.wikipedia.org/wiki/Strong_and_weak_typing
0187デフォルトの名無しさん
2014/07/31(木) 23:09:22.53ID:cjUptmKw実行時まで動作や結果の型が決まらない曖昧さを避けるためだよ。
静的言語では曖昧さは残らないから問題ないわけ。
結果の型が曖昧であることをなるべく許容しないのであれば
「動的言語なら」/演算子は常にfloatを返す仕様の方が曖昧さは少ないだろう。
0188173
2014/07/31(木) 23:18:05.47ID:h0+6R2oIおそらくコードの可読性というか視認性が要因だろね
メソッド名の頭に '_' または '__' が付いていれば、
「それは public じゃないから触っちゃ嫌よ」あるいは
「もし使いたいなら事前に仕様を十分に確認してね」
といったコードの意図が一目でわかる
また、1つクラス定義をできるだけ小さくしようとする
小クラス主義で設計することを考えているから、
スーパクラス-サブクラス間でメソッドを介して関連し、なおかつ
そのメソッドの外部からの利用を(protectedで)禁止するのが
望ましいというケースがほとんど無い(ちょっと思いつかない)
というのも理由かもしれない
最後に、実行前に違反を検出できないアクセス制御に
いったい何の価値があるの?という率直な疑問もあったりする
これはアクセス制御という発想が全く存在しない Smalltalk の影響を
受けているからではないかと思う
とはいえ、こうして指摘される迄、何も疑問に感じていなかった訳だから、
可視性(アクセス制御)の活用も今後は見直すかもしれない
0189187
2014/07/31(木) 23:39:16.07ID:cjUptmKw1.0/3と1/3で結果が変わるのは多態性として考えれば当然。
この問題に限っては、Rubyは型検査の能力を犠牲にして
オブジェクト指向言語としての一貫性を重視しているということだ。>>185の理屈に従えばね。
0190173
2014/07/31(木) 23:54:45.04ID:h0+6R2oI>結果の型が曖昧であることをなるべく許容しないのであれば
>「動的言語なら」/演算子は常にfloatを返す仕様の方が曖昧さは少ないだろう。
もしも Python 3 に「演算子の左辺の型に関わらず結果値の型は一つに決まるべき」
という設計方針/哲学があり、それを演算子 / に適用して「左辺が整数と小数の
いずれでも計算値は小数を返すのが(曖昧さが無いから)正しい」としたのなら、
その主張の正当性を認めよう
>>> 1/2
0.5
>>> 1.0/2
0.5
では次にもう一つの演算子 // について試してみよう
>>> 1//2
0
>>> 1.0//2
0.0
あれ、おかしいな?左辺の型によって戻り値が整数になったり小数になったりしている
もしかすると、Python には一貫した設計方針/哲学なんて高尚なものは存在せず、
演算子の種類によってコロコロ方針を変える(大人の汚い)やりかたが正しいと考えているのかな?
0191173
2014/08/01(金) 00:01:31.80ID:3wJnlar9つまり >>190 を前提とすれば、
「オブジェクト指向言語ではない Python では一貫性を重視しない」
ってこと?
まあ Python の一貫性の無さは >>57 でも指摘しているし、
Python に慣れてしまうと、設計方針の一貫性なんてものは
気にすべきでは無い些細な事柄なのかもしれないね
0192187
2014/08/01(金) 06:46:07.72ID:J39fVXGBだから言語そのものの優劣を主張してるわけじゃないって言ってるだろ煩い奴だな
元はといえば演算子の仕様一つで型付けが強い弱いだのと決め付けようとしたのは自分自身でしょ
主張の矛盾を指摘してるだけ
0193デフォルトの名無しさん
2014/08/01(金) 07:03:34.19ID:pb6Sjbuz開発ポリシーやサポート期間が明文化されていないってのは
採用にあたっての大きな障害になるからな。
言語設計の些末なんぞ経営者や顧客にとっては何の魅力もない。
0194デフォルトの名無しさん
2014/08/01(金) 07:05:32.23ID:EwadhP/C0195デフォルトの名無しさん
2014/08/01(金) 07:11:54.53ID:VcCQb1qoというか出そうなのに出ない
0196デフォルトの名無しさん
2014/08/01(金) 10:29:41.65ID:wXpsznL9> ・Strong and weak typing - Wikipedia, the free encyclopedia
> http://en.wikipedia.org/wiki/Strong_and_weak_typing
日本語版の「型システム」の記事のほうが正確に書いてあるね。
正確な定義と、編集者の主観とかによる内容が怪しげな議論が、きっちり分けてある。
そっちで正しい勉強をされることを勧める。
0197デフォルトの名無しさん
2014/08/01(金) 15:14:38.77ID:YS2dfwIgOSXでdxrubyを使うためにdxruby_sdl導入したいのですが英語に疎すぎてgithubに書いてある説明がよく分かりません
少しだけでも手をお貸しください
0198173
2014/08/01(金) 21:43:31.89ID:3wJnlar9> 1.0/3と1/3で結果が変わるのは多態性として考えれば当然。
たしかに(型付けの強弱よりも)多態性で解釈するのが、
Ruby では素直というか自然な発想ですね
しかしながら、
> この問題に限っては、Rubyは型検査の能力を犠牲にして
> オブジェクト指向言語としての一貫性を重視しているということだ。>>185の理屈に従えばね。
という箇所に関しては、結果が変わる現象を多態性で説明できてしまうのですから、
この演算子の左辺に着目するケースに限れば、
「型検査の能力を犠牲にしている」という指摘は間違いであると考えます
型検査(つまり型付けの強弱)が問題になるのは、
「1.0 / 3.0 と 1.0 / 3 で結果が同じになる」という演算子の右辺に着目するケースです
Ruby の数値系クラスでは、(単なる型判定ではなく)「型強制(coerce)アーキテクチャ」と呼ばれる
設計方針に従った一貫したインターフェイスを提供していますが、
(>>185 の最終段落で述べたように)型強制には型検査の能力を阻害する悪影響があります
したがって、もし犠牲という言葉を強調したかったのであれば、
「今回のケースは無関係であるが、1.0 / 3.0 と 1.0 / 3 で結果が同じになるケースでは、
Rubyは型検査の能力を犠牲にして型強制の利点を重視している」という指摘が正しいと言えます
なお、型検査の能力を犠牲にしているとはいえ、「1.0 / 3.0 と 1.0 / 3 で結果が同じになる」のは
Python も同じなのですから、動的型付け言語である Ruby の設計方針としては妥当な判断でしょう
0199173
2014/08/01(金) 21:51:58.88ID:3wJnlar9>>190 では、型付けの強弱について頓珍漢な我流解釈をしていた >>175,176 と
同一人物であると早合点し、>>189 の多態性という言葉を十分に検討しないまま
即レスしていました
冷静に考えると、ここは Ruby スレなのですから、>>190 はスレ違いなレスでした
気分を悪くさせて申し訳ありません
0200デフォルトの名無しさん
2014/08/01(金) 22:08:57.71ID:02heIdPz高級スクリプト言語(?)で使える、マルチプラットフォームのGUIツールキットで一番よいのはなんでそ?
0201デフォルトの名無しさん
2014/08/01(金) 22:09:39.65ID:3wJnlar9超初心者という甘えで有識者にエスパーを期待しようとしても
ムリゲーだよ
どこがどう分からないかを説明しなければ、
誰もアドバイスできないと思う
たとえば
「..... をしようとして ..... ではないかと考え、
..... という結果を期待して ..... を試してみたけど、
..... というエラーメッセージが返されて失敗しました」
といった文章を書いてみよう
0202デフォルトの名無しさん
2014/08/01(金) 22:53:02.21ID:7R/51h0cgtkでいいんじゃないの。
0203デフォルトの名無しさん
2014/08/01(金) 23:13:00.33ID:YS2dfwIgご指摘ありがとうございます。以後気を付けます。
まずhttps://github.com/takaokouji/dxruby_sdlのREADME.mdを見ながら
ターミナルでSDLとSGEのインストール?を試みました。
SDLは問題なく完了し、次にSGEをインストールするとき8行目の[make]コマンドを実行しようとすると
fatal error: 'freetype/freetype.h' というエラーが発生しました。
なのでfreetypeというものをダウンロード?すれば良いのかと思い、
http://freetype.sourceforge.net/index2.html
ここでダウンロードしてもう一度コマンドを打ちなおしたのですが結果変わらず失敗しました。
0204デフォルトの名無しさん
2014/08/02(土) 00:15:20.50ID:UBZX0AEKすべてをソースからビルドしようとしているみたいだけど、
普通は「パッケージ管理システム」という仕組みを利用する
OSX なら、Homebrew (または MacPorts)になる
(1) GitHub 等で公開されるオープンソース・プロジェクトでは、
まず最初に作者様がソースからビルドする手順を公開する
(2) そしてプロジェクトの提供するソフトウェアに人気が出て
インストールを試す人が増えてくると、ソースからのビルドは面倒なので
有志の誰かさんが Homebrew のようなシステムで扱えるように
パッケージを作って登録する
(3) そうすると、以降はインストールを試そうとする多くの人達が幸せになる
だから、まずは Homebrew を調べて基本操作ができるようになるまで慣れるのが先決
新Mac板に Homebrew 専用スレがあるので、そちらを頼ることも考えよう
なお、"sdl sge ruby mac" でググると、こんなブログ記事が見つかった
・noanoa 日々の日記 : Mac に Ruby/SDL、rsdl、SGE を入れて、MyGame ゲームライブラリを動かす
http://blog.livedoor.jp/noanoa07/archives/1919322.html
この記事でも Homebrew を使っている
他の記事でもいいし、とにかく作業に着手する前に
ネットで情報収集する感覚を身につけたほうがいいと思う
少なくとも FreeType は有名なライブラリなので、
Homebrew を含む大半のパッケージ管理システムでも利用できる
あと SDL と SDL周辺ライブラリも公式パッケージが利用できるみたい
そして SGE には非公式パッケージが存在するような情報があるね(->Homebrewスレへ Go!!)
0205デフォルトの名無しさん
2014/08/02(土) 00:21:35.21ID:Q0DxGqPmif name =~ /\?/
p name
end
end
Integerクラスのメソッドで?が付いている物を取り出すプログラムです。
これは配列の中で正規表現に一致するデータを取り出したいのですが。
もっとスマートに描けないでしょうか?
0206デフォルトの名無しさん
2014/08/02(土) 00:41:59.29ID:PqERPQ+S「コレクションを最初から最後まで見て、マッチするものをなんらかの手段でひとつずつ探している」
であることはどうにもならない
たとえなにか「カッコイイ」メソッドがあったとしても、やってることは同じである
ということで
puts Integer.methods.find_all{ |x| x =~ /\?/ }
0207デフォルトの名無しさん
2014/08/02(土) 01:01:31.31ID:k+09BHkdp Integer.methods.select(&/\?/.method(:=~))
0208デフォルトの名無しさん
2014/08/02(土) 01:15:53.60ID:sO72E4hr0209デフォルトの名無しさん
2014/08/02(土) 01:30:11.06ID:fLjR5gdB入力文字列の改行コードが¥rとか¥nとか¥r¥nとか色々あるんだけど、
正規表現のアンカーの^って行頭にマッチすると言っても¥nで判定してるから
¥rとかでマッチしてくれないよね
改行コードのバリエーションごとの処理は自分でやらなきゃいけないの?
それとも改行コードといえば¥nがデフォとかそういうこと?
0210デフォルトの名無しさん
2014/08/02(土) 01:48:07.49ID:qRelH0Iumakeする時に、もっと詳細を表示する、
オプションを付けて、やり直せ
0211デフォルトの名無しさん
2014/08/02(土) 02:04:35.51ID:qRelH0IuJavaScriptの正規表現では、
改行が\r\n、\nのどちらでも結果は同じになるけど
通常は気にしなくてもいいと思う
0212デフォルトの名無しさん
2014/08/02(土) 02:18:58.04ID:LjQ2kKfu見てみたら簡単なのはこれで大丈夫そうですね・・・
ダサいのはマルチ環境だから贅沢言えないか
0213211
2014/08/02(土) 02:21:00.11ID:qRelH0Iuそれは知らない
0214デフォルトの名無しさん
2014/08/02(土) 02:58:10.97ID:PqERPQ+S改行コードではない
改行文字だ
文字だ
ただの文字だ
以上
0215デフォルトの名無しさん
2014/08/02(土) 03:30:01.16ID:fLjR5gdB0x0Dと0x0Aって言えばよかったのかェ
0216デフォルトの名無しさん
2014/08/02(土) 08:09:12.14ID:gDjKnomp'\n' は '\x0d\x0a' だったり '\x0a' だったりするのは
どうしてなぜ?
0217デフォルトの名無しさん
2014/08/02(土) 08:11:05.08ID:u0m+qxIaよいの定義を先にはっきりしとけよ。
0218デフォルトの名無しさん
2014/08/02(土) 08:43:56.31ID:bMAcdfxk0219デフォルトの名無しさん
2014/08/02(土) 11:07:24.06ID:+3sKWHZpruby 1.9.3p545 (2014-02-24) [i386-cygwin]
の環境で
p Time.now
したときに
2014-08-02 10:51:50 +73956
と出力されます.この +73956 とは何でしょうか?
これ邪魔なので出力させたくないのですが方法はありますでしょうか?
0220デフォルトの名無しさん
2014/08/02(土) 12:04:41.50ID:gDjKnomp0221デフォルトの名無しさん
2014/08/02(土) 19:14:45.58ID:mjAOYCs+Time#inspectを上書き
0222デフォルトの名無しさん
2014/08/02(土) 21:52:37.10ID:k+09BHkd0223デフォルトの名無しさん
2014/08/02(土) 22:01:30.81ID:UBZX0AEKTime.now.to_s.each_char.take(19).join # 先頭から19文字だけ取り出す
>>221 の言うように inspect を上書きするなら、以下のように定義する
class Time
def inspect
self.to_s.each_char.take(19).join
end
end
実行例:
irb(main):001:0> class Time; def inspect; self.to_s.each_char.take(19).join; end; end
=> :inspect
irb(main):002:0> Time.now
=> 2014-08-02 21:58:27
irb(main):011:0>
ただし標準クラスの振る舞い(仕様)を変更するのだから、
むやみに用いるべきではない
0224デフォルトの名無しさん
2014/08/02(土) 22:06:02.20ID:GQoYmdoX0225デフォルトの名無しさん
2014/08/02(土) 22:12:10.95ID:rVz3fll6Rubyには、JavaでいうところのTomcatみたいな
「アプリケーションサーバー」のようなものってありますか?
0226デフォルトの名無しさん
2014/08/02(土) 22:16:48.29ID:GQoYmdoX0227デフォルトの名無しさん
2014/08/02(土) 22:21:39.66ID:rVz3fll6勉強になりました。
ありがとうございました。
0228デフォルトの名無しさん
2014/08/02(土) 22:39:34.17ID:UBZX0AEK標準ライブラリの WEBrick を使うと、
Java でいうサーブレットは簡単に書ける
・Ruby 2.1.0 リファレンスマニュアル > ライブラリ一覧 > webrickライブラリ
http://docs.ruby-lang.org/ja/2.1.0/library/webrick.html
リクエストされたURLに対応したファイルを読むだけの
サーブレット(ファイル・ハンドラと言う)も最初から用意されているから、
簡易Webサーバ(httpd)は超簡単に書ける
もっと手軽にWebサービスを書くのなら、
Sinatra というサードパーティ製のライブラリもある
"ruby sinatra 入門" あたりでググると解説が見つかる
なお、本格的なWebサービス開発を考えているなら、
Ruby on Rails を検討したほうがいいと思う
0229デフォルトの名無しさん
2014/08/03(日) 06:53:33.60ID:P9e0hA8Op Integer.methods.grep(/\?/)
0230デフォルトの名無しさん
2014/08/03(日) 09:57:56.78ID:saA9+Ea3Rubyのpはそのオブジェクトのinspectメソッドというものを呼び出している
inspectは「検査する」「(刑事などが)詳細に調べる」という意味で、
このメソッドはそのオブジェクトの内容を文字として表示するための情報源として使う
たとえばTimeオブジェクトは"2014-08-03 09:41:57 +0900"のような文字列として存在しているわけではなく、
「なんかよくわかんないけど変数とかメソッドとか入ったバイナリみたいなやつ」として存在している
これを直接画面表示しようとするとしんどいので、画面に表示するときにどう表示するかをオブジェクトのクラス製作者が適度に設定している
次、Rubyのpメソッドは前述のようにinspectを呼び出している
pメソッドはデバッグ用メソッドで、スクリプト作成中などにオブジェクトの内容を確かめるために使用される
オ ブ ジ ェ ク ト を 第 三 者 ユ ー ザ ー に 表 示 す る た め の メ ソ ッ ド で は な い
ので、もしオブジェクト内容を綺麗に表示させる必要があるのなら、
(存在すれば)整形メソッドを利用し、文字列を自前で作ってputs等を使用「しなければならない」
いまだに「pは画面表示用のメソッド」「pはputsの省略形」という解説をしてる本やサイトがあるが、燃やして捨ててしまってよい
Timeオブジェクトを特定の書式で表示したい場合は>>222
irb> puts Time.now.strftime('%Y-%m-%d %H:%M:%S')
2014-08-03 09:53:28
0231デフォルトの名無しさん
2014/08/03(日) 14:20:20.23ID:T59meZIw2014-08-03T09:53:28
という風にTが入るのはなぜ?
0232デフォルトの名無しさん
2014/08/03(日) 14:25:58.16ID:Uv66z7PHISO8601か。数字が続くと区切りにくいし、スペースはいろんなとこで区切り記号として使われているからじゃないか。スラッシュやハイフンも日時ではいろんな使われ方してるし。
■ このスレッドは過去ログ倉庫に格納されています