Ruby 初心者スレッド Part 60 [無断転載禁止]©2ch.net

レス数が950を超えています。1000を超えると書き込みができなくなります。
2017/04/29(土) 02:01:58.34ID:urVXnFrH
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
Ruby on RailsについてはWEBプログラミング板で

前スレ
Ruby 初心者スレッド Part 59
http://echo.2ch.net/test/read.cgi/tech/1475394638/

るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/

Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/

逆引きRuby
http://www.namaraii.com/rubytips/
2017/08/10(木) 03:49:56.14ID:HGihyxQL
今現在も苦しんでる途中といってよいんじゃないかな
初めから静的型を導入してれば何でもなかったのにな
Pythonのこの様子をみてmarzは
Rubyに静的型を入れるのを止めたわけで
どのみち行くも留まるも地獄
初めから静的型にしておくのが正解だったわけだな

動的型っていったい何のために有るんだろうな
開発速度も実行速度も遅いんじゃ意味わからないよな
処理系を用意するのが楽ってこと以外はメリットが見当たらない
2017/08/10(木) 04:03:30.21ID:HGihyxQL
JSも非常に苦労が絶えないよね
まず使いにくいから静的型のTypeScriptとか作られたり
ブラウザのJSエンジンも速度上げるためにキチガイじみたことやってるよね
なしてこんなことにって感じ
動的型って世の中を混乱させて無駄なエネルギーを使わすために有るんかね
2017/08/10(木) 04:08:47.85ID:2C7jZkmh
スレ違い
863デフォルトの名無しさん
垢版 |
2017/08/10(木) 06:58:53.68ID:1rmPYDcN
スレが伸びてると思ったらまた例の粘着荒しか
こんなのを生み出したこいつの親に製造責任とって欲しいよ、ホント

win32oleの話題が出てるけど、
ファイルダイアログ扱うCOMってOSのメインバージョン、xpとかvistaとか7とか違っていても共通でいけるの?
それともメインバージョン毎に異なるCOM使わないといけないの?
864デフォルトの名無しさん
垢版 |
2017/08/10(木) 07:05:51.34ID:1rmPYDcN
メインじゃなくてメジャーだったな
2017/08/10(木) 07:36:31.27ID:CnaRda9Q
>>860
だから苦しんでないけど?
2017/08/10(木) 09:29:44.68ID:HGihyxQL
>>865
TypeScriptって凄い名前でしょ
なんたって「Type」Scriptだもんな
言いたいことが名前に表れてる
何に対するアンチテーゼなのか明確
これが今後の常識
867デフォルトの名無しさん
垢版 |
2017/08/10(木) 09:36:29.21ID:stL+geP9
>>855
"mfc71.dll"、"msvcp71.dll"、"msvcr71.dll"の3つのファイルを入手してOSのシステムディレクトリ"c:¥windows¥system32"に保存すればよい。
868デフォルトの名無しさん
垢版 |
2017/08/10(木) 09:40:32.90ID:stL+geP9
VC++ 2010(32bit版)、VC++ 2012(32bit版、64bit版)、VC++2013(32bit版、64bit版)の計5つのランタイムの内、1つをinstallすれば解決できるかも。

まあ、この手のエラーは、ランタイム地獄とか、DLL Hellとかで検索!
2017/08/11(金) 16:38:50.24ID:XzR2MkFB
プログラム初心者がrubyを1から学ぶ上でおすすめの本とおすすめのサイト・ブログを教えてほしいです。
ちなみにルビィの冒険はすでに持ってます。
というかルビィの冒険を読んで興味持ちました。
2017/08/11(金) 17:43:52.20ID:rRCrIO51
ルビィの冒険

はじめてのRuby

パーフェクトRuby

Rubyベストプラクティス
EffectiveRuby
メタプログラミングRuby1版or2版
Rubyによるデザインパターン

リファクタリングRubyエディション
Rubyのしくみ。

ウェブアプリ方面
パーフェクトRubyonRails
RubyonRails5アプリケーション・プログラミング
Docker教科書
JapaScript本格入門第二版
入門Git
GitHub実践入門
SQL 第2版 ゼロからはじめるデータベース操作
達人に学ぶ SQL徹底指南書
SQLアンチパターン
2017/08/11(金) 17:57:19.54ID:yo7J1RVM
JapaScriptってなんか国産っぽい
2017/08/11(金) 18:27:13.22ID:XzR2MkFB
>>870
沢山ありがとうございます!
ちなみに発売日が古い本でも問題はないでしょうか?
昔と今との変更点とかで
2017/08/11(金) 18:35:22.99ID:7nyPWQh8
>>872
残念ながら大有り
そこに気づけただけでも君はバカではないようだ
2017/08/11(金) 20:51:31.14ID:rRCrIO51
>>872
基礎的なことを学んでいくなら問題はない、

しかしJavaScript等は最近大幅なテコ入れがあった。
だから不安なら、ここ最近1年以内の本を買ったほうがいい。

またそもそも基礎的な事、基本的な事なら10年以内の本でも
名著であり続ける。だがその数は少ない。
2017/08/11(金) 23:43:16.47ID:iboA2f8X
>>869
たのしいRubyが定番の入門書
876デフォルトの名無しさん
垢版 |
2017/08/12(土) 03:50:23.72ID:oUZskOr3
Rubyの言語仕様をある程度覚えたら、
次にリファクタリングRubyエディションを読むと良い
コードの最も筋の良い書き進め方を会得できるし、一般的なプログラミング作法の本質を学べる
コードをバリバリ書けるようになるし、Rubyを便利に使いこなす理解も深まる
2017/08/12(土) 05:52:30.53ID:w+TtGEkw
ary = ["a", "b"]

ary[0] = ary[0] + "x"
puts ary[0] #=> ax

ary[1] =+ "y"
puts ary[1] #=> y

上なら、文字列が連結されて、
下なら、b が消えて、上書きになるのは、なぜ?

文字列の、=+ 演算子は意味が異なるの?
878877
垢版 |
2017/08/12(土) 06:04:00.61ID:w+TtGEkw
ary = ["a", "b"]

ary[0] = ary[0] + "x"

# ary[1] =+ "y"
ary[1] += "y"

puts ary

表示
ax
by

自己レス
+= だったか。
=+ と逆に書いていたw

でも、コンパイルエラーが出ない
2017/08/12(土) 06:10:46.47ID:YomJun0W
よっぽど仮想学習的な環境でない限りNoMethodErrorが出るよ
irb> a = %w(a b)
irb> a[1] =+ "y"
NoMethodError: undefined method `+@' for "y":String
2017/08/12(土) 08:30:27.74ID:4WztSMRy
Ruby2.3からString#+@(immutableならば複製)が追加されている。
https://docs.ruby-lang.org/ja/2.3.0/class/String.html#I_--2B--40
881877
垢版 |
2017/08/12(土) 08:33:50.03ID:w+TtGEkw
paiza.IO で実行したけど、コンパイルエラーにならなかった
2017/08/12(土) 08:47:10.82ID:4WztSMRy
>>881
paizaは2.4系だから。あと細かいけど、インタプリタだからコンパイルエラーと呼ぶのは違う気がする
2017/08/12(土) 11:48:52.04ID:CSnAjTr3
文字列のimmutable化による変更のひとつとして、Stringクラスに単項演算子+、-が追加されてる。
ttp://qiita.com/iwamot/items/2ddf8de09d5dbcad2df9

こういう事情らしい。
http://d.hatena.ne.jp/ku-ma-me/touch/20151004
Rubyはやっぱりクソ。互換性に対する配慮が甘い。
2017/08/12(土) 11:53:23.96ID:CSnAjTr3
>>882
言いたいことはわかるが、コンパイルエラーでも問題ないと思う。
実行前の文法エラーなのであれば、あきらかに事前のコンパイル段階のエラーなんだから。
2017/08/12(土) 11:59:10.11ID:CSnAjTr3
あ、>>884に追記。
インタプリタどうこうの点についてのつもりなので、念のため。
881がコンパイルエラーといってるのはおかしいと思うよ。
2017/08/12(土) 12:02:12.46ID:45XD5hPK
>>883
誰かと思えば遠藤さんか
それなら説得力あるな
2017/08/12(土) 12:33:20.77ID:4WztSMRy
>>883
+@, -@の追加は別にいいけど3.0以降のデフォルトimmutable化はさすがに勘弁して欲しいなあ、Railsの声が強すぎる……

>>884
RubyのNoMethodError(というかException全般)は実行を試みて初めて出されるから実行時のエラーだよ。(ランタイムエラーと呼びたいがRuntimeErrorクラスと混同しかねないので悩ましい)
endが足りないとかのSyntax Errorとは別物だと思うけど。こっちは実行前の構文解析。
2017/08/12(土) 13:33:01.18ID:K4TPp3Ad
>3.0以降のデフォルトimmutable化
定数は自動的にfreezeするくらいの対応で良かったな
2017/08/12(土) 13:41:07.20ID:zBhrUX+c
だからそれじゃRailsさんは満足しないんだって
2017/08/12(土) 13:46:16.09ID:K4TPp3Ad
Rails(無理)が通ればRuby(道理)が引っ込む
2017/08/12(土) 13:57:56.00ID:pblAmUa6
RoRのためのrubyをフォークしろって事だな
2017/08/12(土) 14:01:19.65ID:zBhrUX+c
Railsという単一の言語でいいと思うのよ実際
2017/08/12(土) 14:25:04.02ID:zLZ79VVH
Railsさんを追い出したら島根のお役所へのPRに使えるようなRuby採用事例がほとんど無くなって金貰えなくなるからね
Chefみたいなインフラ系の事例を出されても役所の人「ハァ?」だろうし
2017/08/12(土) 14:51:06.74ID:4WztSMRy
RoR上でのみデフォルトでimmutable、ってのも立派な"Rail"じゃないのかなあ。
どうせマジックコメントで切り替えられるようにするんだったらわざわざRuby全体のデフォルトを変えんでもいいでしょうに……
2017/08/12(土) 15:19:12.43ID:K4TPp3Ad
>>892
よくねーよ

Rubyで作れるのは
Webアプリだけじゃねーから

Railsみたいなフレームワークを
言語仕様にしちゃうと窮屈になる
2017/08/12(土) 15:26:53.07ID:zLZ79VVH
>>895
他に何に使われていようが、金を産んでるのもMRIにコミットしてる開発者が作ってるのも事実上Webアプリだけだから
他は無視しても全く問題ないのよ、残念なことに
2017/08/12(土) 15:28:23.95ID:K4TPp3Ad
>>896
そんな発想だから
機械学習とかWeb以外の
ライブラリが充実してるPythonに
国際的に負けてしまう
2017/08/12(土) 15:29:12.97ID:MaFRFCaQ
>>895
知らんよ
RailsがRailsで何を作ろうが関知するものではない
899デフォルトの名無しさん
垢版 |
2017/08/12(土) 23:34:01.47ID:QBhBJkcV
>>870
俺的今日のNo1、カキコ
2017/08/13(日) 00:56:22.58ID:SYaWjJhn
Rubyが、ドンドン、Elixir に近づいていく

>>887
そう言えば、「メタプログラミング Ruby」にも、
NoMethodError を上書きするな、って言う格言があった
2017/08/13(日) 01:10:49.40ID:PA7iDDOj
これも結局速度のために手動で変な最適化をプログラマに課してるだけのことだよな
こーゆーノリはC言語時代にはよくあったと思うけど
なんせ当時のCPUは今から考えるとものすごく遅かったからなぁ
だけど今時だとCPUも速いしコンパイラの最適化も凄いから
特に何も考えなくても十分に速いので、変な最適化に技巧を凝らすより
読みやすいコード書けってのが主流だよな
だけどRubyはメジャー言語より平気で50倍とか遅いし
コンパイラの最適化も糞なので手動で最適化するんだなwww

3.0GHzの最新CPUを使ってても50〜100MHzのCPU相当の速度になるし
加えてコンパイラの最適化も糞で手動で最適化とか
まるで20年ぐらい前の感じだな

動的型でプログラミングが楽になるはずが
静的な型チェックもなければ速度が遅くて手動で最適化とか
本当に動的型は素晴らしいですね
2017/08/13(日) 01:15:14.97ID:WE0t0sIJ
スクリプトで手間暇かけて凝ったアルゴリズムで計算量減らすより
C++でブルートフォースしちゃった方がてっとり早くて速かったりするのはよくある話
スクリプト向きのタスクか否かを感覚的に見抜けることは大切
2017/08/13(日) 01:20:36.73ID:PA7iDDOj
今もう2017年だよな
Rubyはこんな最適化のために
今更言語仕様を変えるだとか変えないとかで盛り上がってて
何なんだろうな
これから先もずっとこんな調子なのかね
元の実行速度が遅いから速くするための最適化のために言語仕様をどうのこうの

今はforループを自動で並列展開してマルチスレッドとかSIMDとかで
コンパイラに頑張ってもらって速度を稼ごうとか
そういうこと言ってる時代なのに
やってることがあまりにも原始的というかなんというか
技術的に何も面白くないし、触ってて本当に楽しいんだろうか?
よく考えられた静的型のシステムがあるわけでもないし
化石言語だな
ありとあらゆることをプログラマに丸投げ
2017/08/13(日) 01:31:38.50ID:PA7iDDOj
ありとあらゆることが悪い方に作用している様は本当にすごいよ
動的型のおかげでそもそも遅そうなのにろくに最適化もかからないから鈍足
遅すぎるのでプログラマが手動で最適化してください
加えて静的な型チェックもしないのでテストするなりなんなり
プログラマが頑張ってください
動的型って何なんだろうね
2017/08/13(日) 02:53:31.36ID:9GyPh5fY
専ブラを使っている人は次の正規表現をNGIDとして突っ込んでおきましょう
\b(ppLsekVC|qMkdrUOQ|IBgoqo2I|AOJFjP\+S|bC2KM4MS|Wy5AX0em|m8GLf68F|hEgnFYnk|HGihyxQL|PA7iDDOj)\b
2017/08/13(日) 04:14:05.84ID:SQfD9dn9
ワッチョイじゃないからあんまり意味ないんだよなぁ
1行読んで心のNGフィルターに突っ込んでるから問題ないけど
907デフォルトの名無しさん
垢版 |
2017/08/13(日) 14:33:04.78ID:bHAx/aO4
ま〜た涌いてるのか
はよー親に製造責任とってもらえよ
2017/08/17(木) 15:09:10.89ID:ESEriUZI
趣味で作られた「オレ様の考える最強言語」にちょっと高望みしすぎじゃないの とか言っちゃダメかな
2017/08/17(木) 15:16:46.98ID:+kyvImyc
初心者スレで暴れまわって機能不全に陥れるとは
Rubyは完全に澱んでるな
Pythonコミュニティとすっかり差が開いてしまった

人気ランキング1位
Pythonは今のうちに習得すべき?『スラスラわかるPython』著者・岩崎さんとPyCon JP理事の寺田さんが語る:CodeZine(コードジン)
http://codezine.jp/article/detail/10329
2017/08/17(木) 18:26:41.54ID:iwOtRZLz
>>908
いわゆるスクリプト言語の多くがそうなんだよなあ。
2017/08/17(木) 20:41:32.26ID:ENaOxomf
コマンドライン引数が表示できません。
OSはwin10、rubyのバージョンは2.4.1-2-x64です。

コードはprint_arg_1.rbという名前で、
#!c:/ruby/bin/ruby
print ARGV[0]

コマンドプロンプトには
c:\ruby\samples>print_arg_1.rb A

と入れてみるのですが、何も(エラーも)表示されません。
Aと表示させるつもりなのですが・・・。
ちなみに、powershellに入力した場合はAと表示できます。
2017/08/17(木) 20:44:36.46ID:KIRXYCO4
c:\ruby\samples>print_arg_1.rb A
のAの前のスペースが全角だからじゃね
2017/08/17(木) 21:09:45.66ID:ENaOxomf
>>912
すいません、そこは半角でした
半角で入れてみても、うまくいきません
2017/08/17(木) 21:12:53.32ID:KIRXYCO4
>>913
ruby -e "p ARGV[0]" A
ってやったら
"A"
って出力される?
2017/08/17(木) 21:16:37.74ID:KIRXYCO4
ruby hoge.rb A
頭にrubyをつけてみては
2017/08/17(木) 21:28:46.60ID:ENaOxomf
>>915

コードを
#!c:/ruby/bin/ruby
p ARGV[0]
と書き換えるということですか?

やってみたところ、nilとでました
2017/08/17(木) 21:50:18.63ID:eXIxbYLq
powershellではどう入力したの
2017/08/17(木) 22:00:16.19ID:ENaOxomf
>>917
.\print_arg_1.rb A
と入力しました。
"A"と出力されます。
2017/08/17(木) 22:07:40.53ID:eXIxbYLq
謎すぎてわからん
2017/08/17(木) 22:18:52.38ID:CKP1LJFf
コマンドプロンプトからwhere ruby
多分rubyがバッチファイル
2017/08/17(木) 23:48:20.77ID:+Rt8Y1Dv
バッチファイルだとしても引数渡さないとかアホやろ
2017/08/18(金) 00:04:08.29ID:pRy4OxRt
windowsの関連付けのバグじゃないのかな
2017/08/18(金) 01:34:08.78ID:0sQWyUaj
以下、そういうときの正確な状況を確認する方法。

次のコマンドラインを実行して、関連付けを確認。
assoc .rb

その出力結果を引数にしてftypeを実行して、実行されるコマンドラインを確認。
2017/08/18(金) 05:42:06.33ID:kayGF/0k
powershellで実行してるものと、コマンドプロンプトで実行してるものが別ファイルである可能性くらいしか無いのでは
925デフォルトの名無しさん
垢版 |
2017/08/18(金) 09:35:17.44ID:dcEfP3Wf
rubyでOpenglいじってるけどコード書き換えやすくて楽しすぎ
他にも楽しそうなもの無い?
2017/08/18(金) 10:03:46.81ID:5/NGjmsA
Sequel4でSQL server上の日本語てんこ盛りのテーブルに接続できるか試しているんですが
日本語以前にシンボルを使ったアクセスだと全部upcaseされているっぽくて
大文字小文字混在の識別名?が指定できなくて詰んでます。

これどこで設定すればいいんでしょうか?
2017/08/18(金) 11:21:40.62ID:MkY1nhvU
.\print_arg_1.rb A
.\ は、カレントフォルダだから、相対パス付き

c:\ で始まっていたら、絶対パス

print_arg_1.rb A
これは、パスではない。
print_arg_1.rb というコマンドになるから、そんなコマンドは存在しない

基本は、実行したいスクリプトファイルのあるフォルダへ、
cd で移動して、そのフォルダで、.\ を付けて、
.\print_arg_1.rb A
とする

#!c:/ruby/bin/ruby
Windows でも、シバンが使えるのか。
パス区切り文字は、/ でも認識できるのか
2017/08/18(金) 12:56:54.66ID:TX/e1x6q
>>925
OpenCVとか?
2017/08/18(金) 13:02:16.70ID:TX/e1x6q
>>927
> Windows でも、シバンが使えるのか。

使えるともそうでもないともいえる。
シェルではなく、Ruby自身が解釈する。

https://docs.ruby-lang.org/ja/latest/doc/spec=2frubycmd.html#shebang
2017/08/18(金) 16:02:30.99ID:eIpnBeVf
しまねω
http://www3.nhk.or.jp/news/html/20170818/K10011103391_1708181154_1708181155_01_02.jpg
2017/08/19(土) 00:44:19.65ID:drv+oAyy
rbのファイルタイプを常に
ruby.exeで開くように設定したんだろう
そのときにたぶん"%1"ぐらいは設定されてるのだろうけど
2017/08/19(土) 01:00:58.21ID:WAJdahb2
pythonのインストーラーが尋ねる2通りの選択
pathに設定するかwindowsシステムにアプリケーションを登録(推奨)みたいなやつがあって謎だったが
今意味が分かった
933デフォルトの名無しさん
垢版 |
2017/08/19(土) 12:53:30.00ID:9KU7ntuJ
環境変数PATH をいじくったら,

すべてのコマンドの起動に影響するから、大変
2017/08/19(土) 13:10:45.58ID:s/Tmv27m
WindowsでのRubyプログラムで
一番大変なのは環境構築だからな
環境変数がどうこうはよく調べておくように
2017/08/19(土) 13:47:01.70ID:9KU7ntuJ
pyenv, rbenv など、仮想環境を使うと、
環境変数PATH の先頭に追加するから、極めて危険

〜python2
〜python3;〜python2

例えば、python コマンドの実行ファイルが、
〜python2 ではなく、先に、〜python3 のパスで見つかるから

そのコマンドが、どの実行ファイルを起動しているのか、くれぐれも注意せよ
2017/08/19(土) 15:34:54.77ID:vQyZjPpv
ruby って -K で文字コード指定して実行出来るみたいだけど
バージョン指定して実行するようなオプションってあったっけ
2017/08/19(土) 15:37:33.84ID:shqQNwwD
>>936
ない
938デフォルトの名無しさん
垢版 |
2017/08/20(日) 20:41:41.88ID:UK9Z84hT
version指定というか、ruby処理系を指定しての実行なら可能なはず
上ででてきた#!c:/ruby/bin/rubyを応用して、
version毎にディレクトリ作ってパス指定
2017/08/20(日) 21:16:31.03ID:RkJWvq6Y
rbenv 入れろ
940926
垢版 |
2017/08/21(月) 10:32:12.71ID:b3IxGKL2
突き止めました
エクステンションを導入して変換を無効化すればよかったです。

DB.extension :identifier_mangling
DB.identifier_input_method = nil
DB.identifier_output_method = nil
941926
垢版 |
2017/08/21(月) 15:46:43.43ID:b3IxGKL2
間抜けなことしてました。
ODBC使うのにsequelが自前でやってると思ったらruby-odbc使ってた。
だからodbc-utf8を先にrequireしないとutf8が通らなくて日本語以前だった。
ほかにもfreeTDSでutf-8だと指定効かないとか気がつかなかった。

bundlerが依存関係全部処理してたから気がつかなかった…
942デフォルトの名無しさん
垢版 |
2017/08/21(月) 19:28:02.56ID:QB5Pvnbo
おつかれい
943926
垢版 |
2017/08/21(月) 21:57:25.45ID:b3IxGKL2
ありがと。

さらに問題発覚。というかsequelの手抜きなんだけど
likeを発行するときにsql server向けの互換レイヤはLatin1_General_*を強制的に付け足す。
ハードコードされてて切り替えできない。とりあえずlib/sequel/adapters/shared/mssql.rbにパッチ当てたけど
gitみてもこの辺対処されて無いっぽい。5になれば期待できそうな感じはあるけど。

あーやっとやっつけ集計バッチをこれで置換できるかもしれん
あとはsinatraとhamlとsassか…
944926
垢版 |
2017/08/22(火) 11:19:06.95ID:BnyIu5Np
いろいろいじった結果
FreeBSD 11.1R
ruby 2.4.0
sequel 4.48.0
ruby-odbc 0.99998
unixODBC 2.3.4
freeTDS 1.00.131,1
Microsoft SQL Server 2008 R2
の組み合わせで日本語てんこ盛りのデータベースを読むは問題なさそう。作ったり書いたりはこれからだけど基本集計だけだし。
結局utf8周りの設定は一切合切消してもrequire 'odbc-utf8'があれば普通に日本語通ってしまった。
数年前に試したときにうまくいかなかったのも多分これのせいだったんだろう。
945デフォルトの名無しさん
垢版 |
2017/08/23(水) 08:24:54.57ID:UQYl7YfQ
そういば、1.8かどうか忘れたけど、
Arrayの派生クラス同士に+をつかって、新しい派生クラスのインスタンス出力しようとしたら、
派生元のArrayのインスタンスが出力されることがあったな

長い間気づかずどつぼにハマッてたのを思いだした
946デフォルトの名無しさん
垢版 |
2017/08/23(水) 08:33:32.73ID:UQYl7YfQ
Arrayの派生クラス同士に

Arrayの派生クラスのインスタンス同士に
2017/08/23(水) 14:36:30.50ID:PKj56klS
たいがいの言語でそうなっちゃうでしょ。
まあしかたないね。
2017/08/23(水) 19:49:57.47ID:XbrvJbom
>たいがいの言語でそうなっちゃうでしょ。

そんなことないよ
静的型だったならどこかでコンパイルエラーになって気づけた可能性もあるよ
949デフォルトの名無しさん
垢版 |
2017/08/23(水) 20:17:43.31ID:UQYl7YfQ
まーた涌きやがったかコイツ

まぁRubyだからこそ直接Arrayクラスのメソッドをself.classをつかったコードに書きえて、
派生先のクラスでも問題なく動かすようにできるわけだけど
当時もそうやって楽に対応できたし、今のverなら書き換える必要も無く対応してるんじゃないか?
確認してないけど
2017/08/24(木) 04:24:49.42ID:tqCPVr7b
このような実例があると
動的型にすると無駄な時間が増えることが
初心者にも分かりやすくてよいですね
2017/08/24(木) 07:03:14.83ID:gO5USKuu
普通、配列のような基本的なクラスからは、クラスを派生させない

継承を使うのは、自分で作ったクラスか、
継承されることが前提のクラスだけ

一般的には、継承より包含を使う

包含の方が、継承よりも柔軟だから、
配列のような基本的なクラスには、合っている
2017/08/24(木) 12:21:31.80ID:NrLz+nwx
DSLに何言ってんだか
Rubyの書きやすさ書き換えやすさは他の言語にない重要なポイントのひとつだろ
953デフォルトの名無しさん
垢版 |
2017/08/24(木) 12:32:10.15ID:5a7RKQDl
>>952
意味不
2017/08/24(木) 14:28:41.04ID:gfjynZsV
>>948
静的型とか動的型とか全く関係ない

>>945
マニュアルくらい読もうぜ
Array#+ は self + other -> Array
https://docs.ruby-lang.org/ja/2.4.0/method/Array/i/=2b.html

pryでshow-doc, show-sourceすればすぐ分かる内容
show-source Array#+

>>951
言いたいことはわかるがArrayを派生したい場合だってある
Rubyはそういうことを制限しない言語
そのかわりに相応の力量が求められる
2017/08/24(木) 14:56:19.91ID:gfjynZsV
Arrayから直接派生させるよりも、
EnumerableやForwardable使うほうが普通だとは思うけどね
2017/08/24(木) 15:12:33.89ID:+u51O4Tc
結果収束的には「可能ではあるが極力行わないようになる」こと自体は間違いはない
なんでもかんでもメソッドチェーンにしないのと似たような感覚
ただし(古い表現だが)足元を弾痕穴だらけにしないとわからない感覚なので、未経験者に最初から指示するようなものでもないな
それはそれで「本当は何もできないやらないわかっていない」机上の人だろう
2017/08/24(木) 15:38:18.44ID:NrLz+nwx
DSLに何言ってんだか
Rubyの書きやすさ書き換えやすさは他の言語にない重要なポイントのひとつだろ
2017/08/24(木) 16:33:57.27ID:gfjynZsV
>>956
Arrayを継承したいと考えた理由次第だろ

モンキーパッチ、リファインメント、継承、コンポジション
それぞれメリットデメリットあるんだから初心者であっても
そのトレードオフが理解して自分で判断できるようにならないとダメだよね?

基本クラスであってもどういう方式を選ぶのがいいのかは状況次第だから
背景理由を無視して、一つの選択肢を採用したほうがいいっていうのはちょっとっ極端に感じるよ
959デフォルトの名無しさん
垢版 |
2017/08/24(木) 20:44:43.22ID:tqCPVr7b0
🐒
2017/08/24(木) 20:49:02.11ID:tqCPVr7b
>>954
仮にArrayを継承させたとして
何かのメソッドで思っていた型と違う型が返ってきたとして
静的型ならコンパイルエラーになって即気づける可能性が高いよね
せっかく>>945がRubyが動的型のせいで
> 長い間気づかずどつぼにハマッてたのを思いだした
って告白してくれてるのに

あるメソッドが、どのような仕様になってるかなんて
そんなものはどのような仕様にでも実装できてしまうわけで
(そう書けばそう動く、というだけ)
大事なのは、勘違いしたとき、間違ったときに、直ぐに気づけるかどうか

だからArrayを継承すべきじゃないとかってのは話の本質じゃなくて
長い間気づかずドツボにハマってたのは何故かって部分なんだよ
レス数が950を超えています。1000を超えると書き込みができなくなります。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況