プログラミング言語 Rubyについての、初心者向けスレです。質問・要望・雑談などをどうぞ
質問するときは、OSやRubyのバージョン、エラーメッセージを書いて下さい。
Ruby on Rails については、WEBプログラミング板で
前スレ
Ruby 初心者スレッド Part 65
https://mevius.5ch.net/test/read.cgi/tech/1545421414/
るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
逆引きRuby
http://www.namaraii.com/rubytips/
Ruby コミュニティ公式
https://www.ruby-lang.org/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
探検
Ruby 初心者スレッド Part 66
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 2a2c-RM0q)
2020/01/04(土) 01:15:34.30ID:X7t3Qsuc02デフォルトの名無しさん (ワッチョイ 422c-RM0q)
2020/01/04(土) 01:17:09.19ID:X7t3Qsuc0 Rubyの絵本、2008
たのしいRuby 第5版、2016
3ステップでしっかり学ぶ Ruby入門、2018
かんたん Ruby (プログラミングの教科書)、2018
プロを目指す人のためのRuby入門、2017
改訂2版 パーフェクトRuby、2017
改訂2版 Ruby逆引きハンドブック、2018 (中級者向け)
Effective Ruby、2015 (中級者向け)
メタプログラミング Ruby 第2版、2015 (中級者向け)
リファクタリング:Rubyエディション、2010 (中級者向け)
RubyでつくるRuby ゼロから学びなおすプログラミング言語入門、2017 (中級者向け)
Rubyのしくみ、2014 (中級者向け)
改訂4版 基礎 Ruby on Rails、2018
パーフェクト Ruby on Rails、2014
Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例、2014
オブジェクト指向設計実践ガイド Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方、2016
Seleniumデザインパターン&ベストプラクティス、2015
たのしいRuby 第5版、2016
3ステップでしっかり学ぶ Ruby入門、2018
かんたん Ruby (プログラミングの教科書)、2018
プロを目指す人のためのRuby入門、2017
改訂2版 パーフェクトRuby、2017
改訂2版 Ruby逆引きハンドブック、2018 (中級者向け)
Effective Ruby、2015 (中級者向け)
メタプログラミング Ruby 第2版、2015 (中級者向け)
リファクタリング:Rubyエディション、2010 (中級者向け)
RubyでつくるRuby ゼロから学びなおすプログラミング言語入門、2017 (中級者向け)
Rubyのしくみ、2014 (中級者向け)
改訂4版 基礎 Ruby on Rails、2018
パーフェクト Ruby on Rails、2014
Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例、2014
オブジェクト指向設計実践ガイド Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方、2016
Seleniumデザインパターン&ベストプラクティス、2015
3デフォルトの名無しさん (ワッチョイ 422c-RM0q)
2020/01/04(土) 01:17:57.47ID:X7t3Qsuc0 開発環境
RDE
Windows用IDE
https://ja.osdn.net/projects/sfnet_rubyde/
以下、RDEの使用説明
http://rubyde.sourceforge.net/hiki/ja/FrontPage.html
RDEのデバッグ機能を使う場合、設定においてデバッグオプションを「-r debug2」から「-r debug」と書き換えて、
ruby付属のdebug.rbを使うようにすること。
RDE付属のdebug2.rbは、ruby1.8用のスクリプトのため、現在のrubyのversionには使えません
サクラエディタ
Windows用高機能エディタ
https://ja.osdn.net/projects/sfnet_sakura-editor/
以下、ruby用設定の説明
http://supportdoc.net/support-sakura/ruby.html
Emacs
GNUの高機能エディタ
Vim
Emacsと同じぐらい有名なCUIベースのエディタ
VSCode
マルチOSに対応したマイクロソフト社製のソースコードエディタ
https://code.visualstudio.com/download
RDE
Windows用IDE
https://ja.osdn.net/projects/sfnet_rubyde/
以下、RDEの使用説明
http://rubyde.sourceforge.net/hiki/ja/FrontPage.html
RDEのデバッグ機能を使う場合、設定においてデバッグオプションを「-r debug2」から「-r debug」と書き換えて、
ruby付属のdebug.rbを使うようにすること。
RDE付属のdebug2.rbは、ruby1.8用のスクリプトのため、現在のrubyのversionには使えません
サクラエディタ
Windows用高機能エディタ
https://ja.osdn.net/projects/sfnet_sakura-editor/
以下、ruby用設定の説明
http://supportdoc.net/support-sakura/ruby.html
Emacs
GNUの高機能エディタ
Vim
Emacsと同じぐらい有名なCUIベースのエディタ
VSCode
マルチOSに対応したマイクロソフト社製のソースコードエディタ
https://code.visualstudio.com/download
4デフォルトの名無しさん (ワッチョイ 2ed3-9wJp)
2020/01/04(土) 01:58:51.41ID:HyaapUw60 乙です
前スレの「メソッドはオブジェクトか?」に関連してなんですが
RubyのUnboundMethodやMethodのインスタンスたるメソッドオブジェクトって
既存のメソッドと等価な複製が作れるってだけで
元のメソッドをオブジェクトにしたものってわけじゃないですよね?
たとえば、特異クラスなんかだと普段はオブジェクトじゃないけれど
class << self; self end みたいなイディオムや Object#singleton_class メソッドでオブジェクトとして取り出せるし
ブロックも &b のような仮引数を付すことでやはりオブジェクトとして取り出せるわけですが
これらとはメソッドとは話が違う
つまり「Rubyのメソッドはオブジェクトではない(〜としては扱えない)」と考えるのが妥当だと思うのですが
この理解で合っていますか?
前スレの「メソッドはオブジェクトか?」に関連してなんですが
RubyのUnboundMethodやMethodのインスタンスたるメソッドオブジェクトって
既存のメソッドと等価な複製が作れるってだけで
元のメソッドをオブジェクトにしたものってわけじゃないですよね?
たとえば、特異クラスなんかだと普段はオブジェクトじゃないけれど
class << self; self end みたいなイディオムや Object#singleton_class メソッドでオブジェクトとして取り出せるし
ブロックも &b のような仮引数を付すことでやはりオブジェクトとして取り出せるわけですが
これらとはメソッドとは話が違う
つまり「Rubyのメソッドはオブジェクトではない(〜としては扱えない)」と考えるのが妥当だと思うのですが
この理解で合っていますか?
5デフォルトの名無しさん (アウウィフ FFa5-p4uH)
2020/01/04(土) 12:04:30.94ID:trUJS7QSF 今北だが
前スレの終わり方が酷過ぎてワロス
もう新スレなんだしそれ以上言うな
前スレの終わり方が酷過ぎてワロス
もう新スレなんだしそれ以上言うな
6デフォルトの名無しさん (アウアウカー Sa69-9wJp)
2020/01/04(土) 12:53:40.81ID:I8dHRpysa これか
996 デフォルトの名無しさん (ワッチョイ 6265-oRfB) sage 2020/01/03(金) 21:03:06.07 ID:e4Snrs1J0
>>993
間違っているという指摘、そのものが誤りだということ
モダンな関数型言語において、すべての値(object)は第一級市民であるが
値と値との関係である適用は値ではない
したがって、そもそも値ではない適用を第一級市民ではないと否定する主張が誤りである
そんなの当たり前だよね
同様に、純粋オブジェクト指向言語において、すべてはオブジェクトであるが、
オブジェクトとオブジェクトとの間の関係であるメソッドはオブジェクトではない
したがって、そもそもオブジェクトではないメソッドを、あえて否定する>>991が誤りではないかと
たとえば、>>986 とそれにに対する反論である>>987 を改ざんして:
986 rubyって全てがオブジェクトなところがいいですよね
(ただしメソッドがオブジェクトなのは常識ですから、あえて言及しませんけど)
987 コメントはオブジェクトじゃないぞ
だったとして、それでもなお>>987を擁護する?
996 デフォルトの名無しさん (ワッチョイ 6265-oRfB) sage 2020/01/03(金) 21:03:06.07 ID:e4Snrs1J0
>>993
間違っているという指摘、そのものが誤りだということ
モダンな関数型言語において、すべての値(object)は第一級市民であるが
値と値との関係である適用は値ではない
したがって、そもそも値ではない適用を第一級市民ではないと否定する主張が誤りである
そんなの当たり前だよね
同様に、純粋オブジェクト指向言語において、すべてはオブジェクトであるが、
オブジェクトとオブジェクトとの間の関係であるメソッドはオブジェクトではない
したがって、そもそもオブジェクトではないメソッドを、あえて否定する>>991が誤りではないかと
たとえば、>>986 とそれにに対する反論である>>987 を改ざんして:
986 rubyって全てがオブジェクトなところがいいですよね
(ただしメソッドがオブジェクトなのは常識ですから、あえて言及しませんけど)
987 コメントはオブジェクトじゃないぞ
だったとして、それでもなお>>987を擁護する?
7デフォルトの名無しさん (アウアウカー Sa69-9wJp)
2020/01/04(土) 15:14:00.74ID:I8dHRpysa これはメッセージとメソッドの区別が付いていない
よくあるパターン?
よくあるパターン?
8デフォルトの名無しさん (ワッチョイ 422c-RM0q)
2020/01/04(土) 23:46:45.39ID:X7t3Qsuc0 Ruby には関数スコープ内に、ブロックスコープがある
関数は、外側の変数を通さない。
一方、ブロックは通す。つまり、クロージャ
C と同じの、強固な2段階スコープ!
一方、JavaScript はクロージャしかない。
関数もクロージャだから、第一級関数
その欠点は、外側の変数を通してしまうから、バグが増える。
だから、Ruby は、2段階スコープを採用したのだろう
処理を持ち運ぶ場合だけ、オブジェクトに変換すればよい
関数は、外側の変数を通さない。
一方、ブロックは通す。つまり、クロージャ
C と同じの、強固な2段階スコープ!
一方、JavaScript はクロージャしかない。
関数もクロージャだから、第一級関数
その欠点は、外側の変数を通してしまうから、バグが増える。
だから、Ruby は、2段階スコープを採用したのだろう
処理を持ち運ぶ場合だけ、オブジェクトに変換すればよい
9デフォルトの名無しさん (ワッチョイ 2ed3-9wJp)
2020/01/05(日) 01:29:02.13ID:+qhlN9cW0 つまりRubyではメソッドそれ自体はオブジェクトではない
ということでしょうか?
ということでしょうか?
10デフォルトの名無しさん (ワッチョイ 9233-YCNF)
2020/01/05(日) 01:51:26.84ID:CSAIgDGG011デフォルトの名無しさん (ワッチョイ 8201-TJkF)
2020/01/05(日) 15:36:12.39ID:NzdiaSgk0 「The Ruby Programming Language」David Flanagan and Yukihiro Matsumoto
6.7 Method Objects
Ruby’s methods and blocks are executable language constructs, but they are not objects.
Procs and lambdas are object versions of blocks; they can be executed and also manipulated as data.
Ruby has powerful metaprogramming (or reflection) capabilities, and methods can actually be represented as instances of the Method class.
6.7 Method Objects
Ruby’s methods and blocks are executable language constructs, but they are not objects.
Procs and lambdas are object versions of blocks; they can be executed and also manipulated as data.
Ruby has powerful metaprogramming (or reflection) capabilities, and methods can actually be represented as instances of the Method class.
12デフォルトの名無しさん (ワッチョイ 422c-RM0q)
2020/01/05(日) 22:47:41.92ID:BPHXVrhY0 JavaScript 第6版、2012、David Flanagan
彼は、JS のバイブル、表紙がサイの絵の、いわゆるサイ本も書いてる!
Google などのエンジニアの机に、必ず置いてある
彼は、JS のバイブル、表紙がサイの絵の、いわゆるサイ本も書いてる!
Google などのエンジニアの机に、必ず置いてある
13デフォルトの名無しさん (ワッチョイ e514-DsOW)
2020/01/05(日) 22:55:53.02ID:UM8RYdV+0 サイフォン?
14デフォルトの名無しさん (アウアウカー Sa69-JS+6)
2020/01/05(日) 23:56:52.37ID:DQgvXjWRa 同じ純粋オブジェクト指向言語のSmalltalkと比べてみた
Rubyのメソッドオブジェクトは要求される度に作っているみたいで持ち出し専用
Smalltalkのメソッドオブジェクトはそのものでその気になれば中身も弄れる
class Object; def foo; "bar" end end
um1 = Object.instance_method(:foo)
um2 = Object.instance_method(:foo)
um3 = um1.clone
p [um1, um2, um3].map{ |m| m.object_id }
#=> [60, 80, 100]
obj = Object.new
bm1 = obj.method(:foo)
bm2 = obj.method(:foo)
bm3 = bm1.clone
p [bm1, bm2, bm3].map{ |m| m.object_id }
#=> [120, 140, 160]
--
"Pharo Smalltalk"
Object compile: 'foo ^''bar'''.
cm1 := Object compiledMethodAt: #foo.
cm2 := Object compiledMethodAt: #foo.
cm3 := cm1 copy.
{cm1. cm2. cm3} collect: [:cm | cm identityHash].
"=>#(832658944 832658944 425444352) "
self foo. "=> 'bar' "
(cm1 literalAt: 1) at: 3 put: $z.
self foo. "=> 'baz' "
Rubyのメソッドオブジェクトは要求される度に作っているみたいで持ち出し専用
Smalltalkのメソッドオブジェクトはそのものでその気になれば中身も弄れる
class Object; def foo; "bar" end end
um1 = Object.instance_method(:foo)
um2 = Object.instance_method(:foo)
um3 = um1.clone
p [um1, um2, um3].map{ |m| m.object_id }
#=> [60, 80, 100]
obj = Object.new
bm1 = obj.method(:foo)
bm2 = obj.method(:foo)
bm3 = bm1.clone
p [bm1, bm2, bm3].map{ |m| m.object_id }
#=> [120, 140, 160]
--
"Pharo Smalltalk"
Object compile: 'foo ^''bar'''.
cm1 := Object compiledMethodAt: #foo.
cm2 := Object compiledMethodAt: #foo.
cm3 := cm1 copy.
{cm1. cm2. cm3} collect: [:cm | cm identityHash].
"=>#(832658944 832658944 425444352) "
self foo. "=> 'bar' "
(cm1 literalAt: 1) at: 3 put: $z.
self foo. "=> 'baz' "
15デフォルトの名無しさん (ワッチョイ 9233-YCNF)
2020/01/06(月) 00:28:28.35ID:bN5NBzFy0 C#も、メソッドをランタイムにビルドできるんやで!
16デフォルトの名無しさん (アウアウカー Sa69-9wJp)
2020/01/06(月) 01:11:00.75ID:Bux8XPhea いやここでのポイントはメソッドがオブジェクトなのかどうかであって
ランライムにメソッドをビルドできるかは関係ないしむしろ出来て当前
ランライムにメソッドをビルドできるかは関係ないしむしろ出来て当前
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 今年の漢字 [ぐれ★]
- 【おこめ券】物価高対策の“おこめ券”全米販は1枚477円で販売へ 鈴木農水大臣「国民の皆様に活用いただきやすいよう工夫いただいた」★2 [ぐれ★]
- 【麻雀】プロ雀士の岡田紗佳さんが勝訴、点数計算めぐる発言は「違法とは言えず」 大宮簡裁 [征夷大将軍★]
- ミス・ユニバース フィンランド代表の「つり目」写真が波紋… 本人釈明も批判やまず 協会謝罪「徹底的に検証」へ★3 [冬月記者★]
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★5 [蚤の市★]
- 今年の漢字は「熊」に決定! 相次ぐクマ被害 去年は「金」 [冬月記者★]
- 虫歯の味ってわかるよね
- 参政党議員「クジラの肉を食べないのは流通や販路に問題があるからだよね?」 [592058334]
- (´;ω;`)血尿が出た
- __トランプ、G7に代わる「Core 5」構想、米 中 露 印 日をまとめる巨大枠組み、世界秩序の再編につながる可能性 [827565401]
- お絵描きAIくん、風が強い!! 可愛い女の子も作れる
- VTuber叩きが大流行してる理由、1枚の画像で解説される…!! [858219337]
