Ruby 初心者スレッド Part 62

■ このスレッドは過去ログ倉庫に格納されています
2017/11/24(金) 00:35:29.31ID:rLZHdQ3Q
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
Ruby on RailsについてはWEBプログラミング板で

前スレ
Ruby 初心者スレッド Part 61
https://mevius.5ch.net/test/read.cgi/tech/1503644351/

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

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

逆引きRuby
http://www.namaraii.com/rubytips/
541デフォルトの名無しさん
垢版 |
2017/12/24(日) 10:02:29.66ID:naA/wMe4
環境を書いてから
何したいかを言え
2017/12/24(日) 10:08:38.24ID:imZP4RC3
なんで素直にexe落とさないの?
543540
垢版 |
2017/12/24(日) 10:48:40.19ID:24EH1p52
圧縮された書庫だから、7-Zip Archives から、Ruby 2.4(x64)をダウンロードしたけど、
これはインストーラーとは違うものなのか?
rubyinstaller-2.4.3-1-x64.7z というファイル名だったけど

7-Zip Archives の上にある、RubyInstallers から、Ruby 2.4(x64)をダウンロードしてみるわ
544540
垢版 |
2017/12/24(日) 11:01:29.86ID:24EH1p52
PowerShell で、7-Zip Archives 中の、\bin\ridk.ps1 version を実行してみた

PS C:\Ruby24-x64\bin> .\ridk.ps1 version
---
ruby:
path: C:/Ruby24-x64
version: 2.4.3
platform: x64-mingw32
ruby_installer:
package_version: 2.4.3-1
git_commit: 36aac73
os: Microsoft Windows [Version 10.0.16299.125]

やっぱり、これも、RubyInstaller なのかな?
よくわからない
2017/12/24(日) 11:02:00.42ID:A3ERayLu
Rubyにパイプラインオペレータってないの?

JavaScriptだと

exclaim(capitalize(doubleSay("hello")));
というカッコの入れ子が

"hello" |> doubleSay |> capitalize |> exclaim;

とシェルスクリプトのパイプのように
流れるような形で記述できるようになるらしいんだけど
2017/12/24(日) 11:05:46.33ID:mMj7aGtc
>>545
そんなのがあると誰もオブジェクト指向しなくなるからRubyの思想には合わないだろ
素直にメソッドチェインでやるか、さっさと関数型言語に乗り換えるべき
547540
垢版 |
2017/12/24(日) 11:08:13.75ID:24EH1p52
7-Zip Archives からダウンロードした、Ruby 2.4(x64)は、
ひょっとして、CUI 版のインストーラーなのかな?
(rubyinstaller-2.4.3-1-x64.7z というファイル名だった)

7-Zip Archives 中の、\bin\ridk.ps1 に引数を付けて、
インストールするのかも知れない

よくわからないけど。
インストーラーじゃないかも知れないし
2017/12/24(日) 11:08:41.37ID:2eVeUlKQ
>>544
>>542

>>545
こんな gem がある
http://yuroyoro.github.io/lambda_driver/
2017/12/24(日) 11:14:59.06ID:24EH1p52
>>545-546
まさに、Elixir

Matz も、Streem という新言語を考案して、日経Linux に連載していた。
GitHub にあるらしい
550540
垢版 |
2017/12/24(日) 11:29:56.75ID:24EH1p52
7-Zip Archives から、Ruby 2.4(x64)をダウンロードすると、
rubyinstaller-2.4.3-1-x64.7z というファイル名だった。
これを、7-Zip で解凍すると、56MB になった

56MB もあるし、\bin の中には、ruby.exe, rubyw.exe もある。
実行環境が揃っているような気もする

実はポータブル版で、環境変数PATH を通せば、実行できるのかも知れない

よくわからないけど、何か捨てがたいw
551540
垢版 |
2017/12/24(日) 11:37:26.57ID:24EH1p52
PowerShell で、7-Zip Archives 中の、\bin\ruby.exe -v を実行してみた

PS C:\Ruby24-x64\bin> .\ruby.exe -v
ruby 2.4.3p205 (2017-12-14 revision 61247) [x64-mingw32]

やっぱり、7-Zip Archives の中にあるやつは、ポータブル版じゃないのか?
ひょっとして、実行もできるかも?
2017/12/24(日) 12:51:21.82ID:W/aeQ+z1
実行できて当たり前なのに何を言っているのか
インストーラーはパスを通したりするだけだぞ
553540
垢版 |
2017/12/24(日) 13:37:01.71ID:24EH1p52
7-Zip Archives からダウンロードした、Ruby 2.4(x64)は、
環境変数PATH が通っていないだけで、実行できるの?

ここに、実行環境が一式が揃っているの?
つまり、どこにでも移動できるポータブル版?
2017/12/24(日) 13:55:33.60ID:A3ERayLu
>>548
期待したけど、やっぱりRubyの文法からは抜け出せないか
DSLが得意と言っても所詮Rubyの言語であることに変わりはないしな
2017/12/24(日) 13:58:58.91ID:A3ERayLu
>>546
まあ頭が固いw

a + b はオブジェクト指向じゃないっていうんですか?
a.add(b) ってしなきゃいけないですね
2017/12/24(日) 14:12:36.12ID:BNj/0IJ2
>>555
Rubyに文句を言う前にまずはRubyの仕様くらいちゃんと理解しよう
+は全く特別なところのないごく普通のインスタンスメソッド呼び出しだぞ
関数型でaddにパイプライン使うとしたら
b |> add(a) # add(a, b)に相当
こうなるわけだが、理解してるか?
2017/12/24(日) 14:15:02.58ID:A3ERayLu
>>556
まあ君はJavaScriptの仕様を知らなくて当然だろうけどね

|> オペレータっていうのは、引数を一つの関数呼び出しの
シンタックスシュガーに過ぎない
だから関数呼び出しを行ってるのと一緒

関数呼び出しをするとオブジェクト指向にならないのか?
そんなわけあるかw
2017/12/24(日) 14:29:26.20ID:BNj/0IJ2
>>557
ある機能が言語に追加されることでコーディングのスタイルが大きく変わってしまうことはよくある。
まあそういう経験則的な話は君には通じなそうだから、もっと具体的にRubyとの相性の悪さを説明してあげよう。
まず、関数型言語やJavaScriptでは裸の関数名は第一級関数(関数オブジェクト)だが、Rubyではメソッド呼び出しになってしまう。
だから>>548のようにシンボルを使った汚いハックをするか、|>の後にくる識別子は第一級関数として扱うという特別ルールを設けることになる。
特別ルールを設けたとしても、>>556のaddの例みたいな使い方には対応できない。
君は関数型言語を知らないみたいだから説明しとくと、add(a)はadd関数の第一引数にaを部分適用(カリー化)した引数一個の関数を返す。
|>の直後には必ず関数名が来るというルールだと、これは実現できないのはわかるよね。
559558
垢版 |
2017/12/24(日) 14:33:34.04ID:BNj/0IJ2
それと、Rubyの関数は殆どがインスタンスメソッドであるというのも忘れてはいけない。
x |> y.hoge
これは y.hoge(x) と解釈すべきだろうか?
それともy.hoge()(x)かな?
今のRubyの仕様からすると後者が自然だと思わない?
2017/12/24(日) 14:46:41.85ID:bBhW4Y9m
ようお前ら。
Ruby 2.5が来るのは明日だぞ。
gem作ってる奴はちゃんと準備出来てるか?
Ruby2.5にした途端に泣きを見ることのないようにしとけよ。
2017/12/24(日) 15:29:04.65ID:A3ERayLu
>>558
あ、なるほどw シンタックスシュガーって言ってるのに、
あんたは関数型の仕様に変更すると思い込んでるわけかw

俺、Rubyを関数型にしろなんて一言も言ってないよ?
JavaScriptが関数型になったなんて一言も言ってないよ?

ただ、関数呼び出しのネストは見づらいから、一つの引数を取る関数の呼び出しを
|> でつなげた "書き方" ができると良いねって話しかしてないんだよ

> 今のRubyの仕様からすると後者が自然だと思わない?
理由が書いてないから判断不可能だね

>>556
> 関数型でaddにパイプライン使うとしたら
> b |> add(a) # add(a, b)に相当
> こうなるわけだが、理解してるか?

ぷぷw |> という記号を使っだけで、関数型になるべきだなんて
思い込んでるからそういう結論になる。馬鹿だねぇ

JavaScriptの関数型でない単なるパイプラインオペレータは引数が1つの
関数を受け取ることしかできない。 カリー化?そんなものはしない。
関数型のパイプラインオペレータを導入なんて話はしてないんだから当然の結論

引数が複数の関数を使いたければ、アロー関数でそうなるように書くだけの話

https://github.com/tc39/proposal-pipeline-operator
let newScore = person.score |> double |> (_ => add(7, _)) # アンダースコアは只の変数、iでもaでも良い

papp proposalのpappメソッドを使うとこう書くこともできるようだけど
let newScore = person.score |> double |> add.papp(7)
2017/12/24(日) 15:52:11.56ID:2eVeUlKQ
>>554
Ruby使うんだから当たり前の話でそ?
Rubyじゃないスタイルでどうしても書きたいならすでにRubyを使う必要はないと思うんだけど
2017/12/24(日) 15:54:48.61ID:/VeWYwOF
Juliaおぬぬめ
2017/12/24(日) 16:00:56.08ID:2eVeUlKQ
Juliaいいね。これから大注目の言語だよ
ただ、現状は起動が激重なのでJuliacとかが公式採用されないとつらいかも
そういう意味ではJavaに似てるのかも(言語仕様という意味ではなく)
2017/12/24(日) 16:12:39.10ID:BNj/0IJ2
Juliaはクソ重い計算やデータの処理を長時間ぶっ通しで動かすための言語だよ
Rubyと比べるようなもんではないし、起動時間が問題になるようなものに使うのも間違い
566デフォルトの名無しさん
垢版 |
2017/12/24(日) 20:04:37.70ID:4g6ysjQ5
>>545
>流れるような形で記述できるようになるらしいんだけど

できるようになるといふのは、以下の提案かな?
・ESNext Proposal: The Pipeline Operator
 https://github.com/tc39/proposal-pipeline-operator

調べてみると、これはあくまで提案(proposal)であって、
5段階あるECMAScript(= JavaScript)仕様策定過程の2番目に過ぎない
 0. Strawman
 1. Proposal <― パイプライン演算子の状態
 2. Draft
 3. Candidate
 4. Finished
当然、現時点でその実装は存在しておらず「絵に描いた餅」に過ぎない
言い換えると、「こんなのできたらいいなあ」といふ話だよね?
567デフォルトの名無しさん
垢版 |
2017/12/24(日) 20:35:54.14ID:4g6ysjQ5
>>561
>関数型のパイプラインオペレータを導入なんて話はしてないんだから当然の結論

え、こう書けないっていうの?
  let newScore = person.score |> double |> add(7)
もし pipeline proposal が Finished(採用決定)になったとしても、このコードを
  let newScore = person.score |> double |> (_ => add(7, _))
こうも冗長に書かなけりゃならないなんて、ダサイというか中途半端な提案だと思う

>>554の言葉を借りると:
  期待したけど、やっぱりJavaScriptの文法からは抜け出せないか
  新しい提案と言っても所詮JavaScriptの言語であることに変わりはないしな
っていう感想です

しかも更にpapp proposal(部分適用サポートの提案)がFinishedになったと仮定してもなお
  let newScore = person.score |> double |> add.papp(7)
こうなっちゃうなんて、もう少し練り直してから提案した方がいいと思うんだけどなぁ
568540
垢版 |
2017/12/24(日) 22:02:54.10ID:24EH1p52
JS は、Ruby, Elixir の影響が強い。
Kotlin も、Groovy, Ruby の影響が強い

誰か、
>>540
の、7-Zip Archives の所からダウンロードした、
Ruby 2.4(x64)をどうすればよいのか、教えてほしい
2017/12/24(日) 22:25:11.95ID:ZqTzsWSR
>>568
パスを通せ
2017/12/24(日) 23:05:16.75ID:A3ERayLu
>>567
> え、こう書けないっていうの?

少しは頭を働かせようよw

そこにある、add(7) が引数を一つ取る関数を返すなら書けるよ
それを汎用化したのがpapp。それにJavaScriptでカリー化する方法だってある

JavaScriptは関数型言語じゃないんだから、関数型言語の方からみて
ダサいとか言うなよw お前、関数型に洗脳されてるだろw

関数型を取り入れたなんて話はしてない。お前が言い出しただけ。
単にパイプラインオペレータという関数のネストを見やすくする機能を
追加するってだけの話
2017/12/24(日) 23:07:29.50ID:2eVeUlKQ
>>570
Rubyについてはこんな書き方しかできないのかと毒づいておいて、JavaScripitについては全力擁護
これをRubyスレでやらかしてたら荒らし認定を食らってもしょうがないレベルだぞ
2017/12/24(日) 23:12:18.94ID:A3ERayLu
>>566
> 当然、現時点でその実装は存在しておらず「絵に描いた餅」に過ぎない
知らないなら、知ったかぶりして語らないでよw

JavaScriptは5段階あるECMAScript(= JavaScript)仕様策定過程を
必ず0から一つづつ上げて行かないといけない
だからどんな仕様だって最初は0から始まる

こういう提案から仕様化されるまでのプロセスが明確になってるのは素晴らしいことだよ

で、Stage 1だが

https://azu.github.io/slide-what-is-ecmascript/slide/12.html
・プロポーザルの目的や解決方法を示す
・Polyfillやデモ等を用いて解説する

どういうことかというとPolyfillやデモ等があるってことだ。
わかりやすく言うと、すでに使う方法があるってことだ。それがこれ
https://www.npmjs.com/package/babel-plugin-transform-pipeline

なので絵に描いた餅ではない。絵に描いた餅はStage 0
その0を脱却して、すでに使う方法が出来たということ
573540
垢版 |
2017/12/24(日) 23:16:34.36ID:24EH1p52
7-Zip Archives の所からダウンロードした、Ruby 2.4(x64)を解凍し、
C:\Ruby24-x64 に改名して、

Windows10 で、ユーザー環境変数に、C:\Ruby24-x64\bin を追加したら、
PowerShell で、ruby コマンドが使えるようになった

PS C:\Users\Owner\Documents\Ruby> ruby -v
ruby 2.4.3p205 (2017-12-14 revision 61247) [x64-mingw32]

C:\Ruby24-x64\bin には、erb, gem, irb, rake, ruby.exe, rubyw.exe
などのコマンドがあるから、
7-Zip Archives の所にあるものも、Rubyのポータブル版の実行環境なのかも
2017/12/24(日) 23:17:27.23ID:2eVeUlKQ
>>572
でさ、結局何が言いたいの?
JavaScriptサイコーってのが言いたいのなら完全にスレ違いだよ
575540
垢版 |
2017/12/24(日) 23:23:27.95ID:24EH1p52
ちなみに、rubyinstaller の 7-Zip Archives の所からダウンロードした、
Ruby 2.4(x64)は9MB で、解凍すると56MB になった

1/6 に圧縮されている
2017/12/24(日) 23:37:20.25ID:A3ERayLu
>>574
> でさ、結局何が言いたいの?
Rubyもサイコーになろうぜ
577デフォルトの名無しさん
垢版 |
2017/12/25(月) 00:01:06.18ID:h6gXOlbY
>>570
>関数型を取り入れたなんて話はしてない。お前が言い出しただけ。

>>556 とは別人だけど、IDを確認できないほど冷静さを失っているのかな?

また、そもそも>>545の exclaim, capitalize, doubleSay という関数単位で部品化して
パイプライン演算子で組み立てるという発想そのものが関数型プログラミングであり、
それを自分(ID:A3ERayLu )から言いだしたという認識ができていないのかね?


>単にパイプラインオペレータという関数のネストを見やすくする機能を追加するってだけの話

だよね、関数型のパイプライン演算子と同じ名前だけど中身は微妙に異なるJavaScript固有の方言が
一つ提案されたという、ただそれだけの話
しかも最終的に採用されるか否かも確定すらしていない Proposal 段階でしかないといふ
2017/12/25(月) 00:21:34.94ID:mSK8fdnz
> また、そもそも>>545の exclaim, capitalize, doubleSay という関数単位で部品化して
> パイプライン演算子で組み立てるという発想そのものが関数型プログラミングであり、

関数呼び出しの形を変えただけ、
関数型プログラミングとは全く関係ない
579デフォルトの名無しさん
垢版 |
2017/12/25(月) 00:25:59.73ID:h6gXOlbY
>>576
関数型言語のパイプライン演算子がサイコーという話なら同意するし、
それがオブジェクト志向言語であるRubyにとって今すぐ必要かどうかは別にして、
数ある将来のRuby構想に向けた提案の一つとして理解したい

でも >>561,570で自身(ID:A3ERayLu)が語っているように、
JavaScriptのそれは関数型ではないJavaScript固有の方言なんだろ?
JavaScriptが独自の道に進もうとしてるなら「どうぞお好きになさいませ」だし、
それにRubyも従うべきという話に至っては「何を考えてるの?」としか言えないね


>>570
>単にパイプラインオペレータという関数のネストを見やすくする機能を
>追加するってだけの話

どちらかというと日常的にカッコだらけになるのはPythonだから、
そちらへ提案した方がいいんではないかな
http://mevius.2ch.net/test/read.cgi/tech/1491491123/44-46

関数型プログラミングを公式文書で否定しているPythonだから、
関数型ではないパイプライン演算子の提案はきっと喜ばれるよ
2017/12/25(月) 00:38:42.38ID:W15ZQhn0
いずれにせよ>>559のようにメソッド呼出の括弧省略の問題があるからJavaScriptやCaml系のようなクリーンなシンタックスにはならないけどね
&:symbolとか->みたいなハック感溢れる醜い構文になる
581デフォルトの名無しさん
垢版 |
2017/12/25(月) 01:02:31.40ID:h6gXOlbY
>>580
いや、オブジェクト指向言語のRubyなら、現時点でも
簡潔にメソッドチェーンで流れるようなコードが書ける

以下は>>545の例:
 https://ideone.com/aExbWe

refinements に関しては以下の記事が分かりやすかったのでご参考
・Ruby の refinements の使い途 - Qiita
 https://qiita.com/scivola/items/dc49d56c90fd0cb6d4d3

で、何かご不満はございますか?
2017/12/25(月) 01:03:23.68ID:mSK8fdnz
>>579
JavaScriptは元から関数型じゃないし
関数型になんかなろうとしてないよw
2017/12/25(月) 01:05:56.92ID:mSK8fdnz
>>581
> で、何かご不満はございますか?

はい。

def foo(i); end
def bar(i); end
def baz(i); end

となっているものの baz(bar(foo(1)) という呼び出しを
メソッドチェーンで繋げないということです。

パイプラインオペレータならこの通り
1 |> foo |> bar |> baz
584デフォルトの名無しさん
垢版 |
2017/12/25(月) 01:53:39.67ID:h6gXOlbY
>>582
>JavaScriptは元から関数型じゃないし

うーみゅ、やっぱりJavaScriptって誤解されてるのね
・クロージャって何がいいの?
http://mevius.2ch.net/test/read.cgi/tech/1415419907/224

リンク切れ邦訳版「JavaScriptの勉強:世界で最も誤解されたプログラミング言語」
http://web.archive.org/web/20130120204931/http://d.hatena.ne.jp/brazil/20050829/1125321936
>  Cの皮を被ったLisp
>
>  JavaScriptには、Cのような中括弧や不格好なforステートメントがあるため、
>  一般的な手続き型言語のように見えますが、それは誤りです。JavaScriptはCやJavaよりも、
>  LispやSchemeのような関数型言語と多くの共通点を持っているのです。JavaScriptには、
>  リストの代わりに配列があり、プロパティリストの代わりにオブジェクトがあります。
>  関数はファーストクラスであり、クロージャも備えています。つまり括弧の対応をとる手間なしに、
>  ラムダを利用できるのです。


>>583
それに関しては納得
前スレで書いたように、Rubyにおいてメソッドは一級市民(ファーストクラス)ではありませんからね
・Ruby 初心者スレッド Part 61
 http://mevius.2ch.net/test/read.cgi/tech/1503644351/210
2017/12/25(月) 01:57:26.36ID:6htjEWah
ここはJavaScriptスレじゃないよ
2017/12/25(月) 02:12:49.73ID:mSK8fdnz
>>585
JavaScriptは関数型だってことにしたいんでしょw
2017/12/25(月) 02:14:31.41ID:6htjEWah
>>586
JavaScriptの話はそっちのスレでやれってこと
588デフォルトの名無しさん
垢版 |
2017/12/25(月) 02:19:08.95ID:h6gXOlbY
>>585
まったくそのとおりですね
といふことで、JavaSciptのパイプライン演算子を提案されている方は、
JSスレヘお帰りになられるか、もしくわ

  日常的にカッコだらけになってしまうPython(>>579)

スレへ移動されるよう希望します

特にRubyと違ってPythonは関数が一級市民ですから、
JavaScriptの手法を適用するのは(Rubyよりも)容易でしょう
2017/12/25(月) 10:22:56.25ID:yHCsyXBb
Windows10 の、VS Code で、irb (PowerShell ターミナル)を起動して、

put "abc"
なら、実行できるけど、

put "あいう"
のように日本語があると、実行できないね
590589
垢版 |
2017/12/25(月) 10:27:56.95ID:yHCsyXBb
put "abc" # あ

のように、コメントに日本語がある時は、実行できる
2017/12/25(月) 10:29:17.76ID:FXcNW9u1
>>589
それはrubyじゃなくてlibeditの不具合だよ
592589
垢版 |
2017/12/25(月) 12:11:57.01ID:yHCsyXBb
知らないけど、UI 部分を、C言語とかで作っているから、
いつまで経っても修正できないのだろう

UI 部分は、VS Code みたいに、
ブラウザ技術を使っている、Electron で作れば良かった
2017/12/25(月) 20:14:59.36ID:YHWK2l8N
ねんがんのRuby 2.5.0をてにいれたぞ‼
https://www.ruby-lang.org/ja/news/2017/12/25/ruby-2-5-0-released/
2017/12/25(月) 21:16:04.65ID:FXcNW9u1
yield_selfは使いどころが結構ありそうだね
2017/12/25(月) 21:25:14.33ID:s8SRCdHD
使い方わかんないな
2017/12/25(月) 21:52:41.67ID:YHWK2l8N
yield_selfはこれまでメソッドチェーンをしたくてもできなかった場合で活躍するね
途中の一時変数は用無しになった
597デフォルトの名無しさん
垢版 |
2017/12/25(月) 22:38:48.18ID:h6gXOlbY
昨日のパイプライン演算子に関する話の中に出てきた >>583 のようなケースが
以下のように書けるようになる

https://ideone.com/hZI7wT

・Ruby 2.5 の yield_self - Qiita
 https://qiita.com/stomk/items/58dce3e5e294639ab1c9

F# や Elixir の登場ですっかり世間の認知度がアップしたパイプライン演算子、
すっかりハマって
「プログラミングスタイルをパイプライン形式(いわゆるメソッドチェーン)で統一して書きたい!」
という欲求を抑えられない人たちにとっては嬉しいメソッドの新設ではないかと思われ

個人的には、メソッド名は apply もしくはそれを短くした app が
感覚的に合っていた(エイリアスを定義するだけなんだけどね)
2017/12/25(月) 22:46:27.01ID:mSK8fdnz
ふっふっふ、ようやく気づいたかね?
昨日のパイプライン演算子の話は
ここにつながるのだよ
599デフォルトの名無しさん
垢版 |
2017/12/25(月) 23:07:16.77ID:h6gXOlbY
つまり:
・JavaScriptでは現時点だと最終的に採用されるか否かも定かでない Proposal 段階で、
 実験的な実装をいじってあーだこーだ議論している真っ最中
・一方、Rubyではとっくに議論を終えて公式にリリースを終えてしまった
といふ話ですね
2017/12/25(月) 23:20:17.82ID:YHWK2l8N
ちょっと面白い発見
ppを使うのにrequire要らずだってあったから試してみたけど、
使った最初に自動でrequireするようになってる

$ ruby25 --disable-gems -e 'puts $"'
enumerator.so
thread.rb
rational.so
complex.so
/usr/local/lib/ruby/2.5/amd64-freebsd11/enc/encdb.so
/usr/local/lib/ruby/2.5/amd64-freebsd11/enc/trans/transdb.so

$ ruby25 --disable-gems -e 'pp $"'
["enumerator.so",
 "thread.rb",
 "rational.so",
 "complex.so",
 "/usr/local/lib/ruby/2.5/amd64-freebsd11/enc/encdb.so",
 "/usr/local/lib/ruby/2.5/amd64-freebsd11/enc/trans/transdb.so",
 "/usr/local/lib/ruby/2.5/prettyprint.rb",
 "/usr/local/lib/ruby/2.5/pp.rb"]
2017/12/26(火) 14:56:29.62ID:75dqQ4yg
private methodを定義する時ってどう書くのが普通?

private def foo
__bar
end

def foo
__ bar
end
private :foo

# クラスの後ろにまとめて定義
private
def foo
__bar
end
602デフォルトの名無しさん
垢版 |
2017/12/26(火) 16:40:03.50ID:pHnCZ49/
自分の好きなタイミングで
2017/12/26(火) 17:17:14.64ID:MQU8AiWM
他人が読んで読みやすいとと思う書き方。
2017/12/26(火) 17:36:54.63ID:Zhknjblq
俺は後ろにまとめて書くようにしてる。
ついでに言うとprivateが連続した場合2個目以降のprivateは不要だが、パッと見て分かるように常に付けている。

最近は触って欲しくないメソッドはリファインメントを使うっていう手法を覚えたけど、これは異端なのか分からない。
605デフォルトの名無しさん
垢版 |
2017/12/26(火) 22:52:56.50ID:pHnCZ49/
アンチ息してる?
アンチスレ死亡してるみたいだけど
2017/12/26(火) 23:11:59.17ID:Xx1508gc
アンチスレ死亡させていいよ
存在価値無いし、ここで十分
2017/12/26(火) 23:45:46.61ID:p5HaZQjy
そもそもRubyのprivateって実質的な強制力はほぼゼロでコメントとしての意味くらいしかないからな
そういう意味ではよほど小さなクラスを除けば全部に付けないとあまり意味ないんじゃないか
2017/12/27(水) 01:21:36.89ID:kb3Qecdj
アンチがアンチスレの存在をすっごい嫌がってるのは、本スレで暴れたいからだろうな

だが、断る
アンチはあの過疎ったアンチスレへ帰るべきだ
2017/12/27(水) 01:24:11.45ID:Kn/lt9VX
結局ここにアンチが来てなくても
アンチの話題をしたいわけなんだよな
もう病気だと思うよw
2017/12/27(水) 01:24:47.07ID:Kn/lt9VX
アンチスレも定期的に見てるようだし
611589
垢版 |
2017/12/27(水) 01:58:58.62ID:u0gTyM9V
>>589-592
自己レス

irb -E CP932

irb の起動時に、オプションを付けると、日本語文字列も正常になった

puts "あ"

Ruby は、Windows でも無敵やな!
612デフォルトの名無しさん
垢版 |
2017/12/27(水) 04:54:44.27ID:vGbq0nNV
>>601
人それぞれでいいと思うけど、自分はクラスの後ろにまとめて定義する派だね
ドキュメンテーションとしての可読性を重視し、あるクラス定義において
デフォは公開したいメソッドだけどキーワード private で宣言した以降の
セクションは非公開にしたいという意図がある

 class Klass
   公開したいメソッドの定義セクション
 private
   不公開なメソッドの定義セクション
 end

個別に宣言する private :foo を使うケースは、公開するつもりでクラスを設計したけど、
リファクタリングの過程で「このメソッドは非公開でもいいんじゃね?」と疑問を感じたら
private :foo を付けテストを流して実験するといった一時的なもの


>>607
確かに、メンバ変数のアクセス制限という概念が無く、全ての変数がpublicとして扱われるのよね
 https://qiita.com/nkennek/items/8c54365cb873cca8730a
 http://woodyring.blog.so-net.ne.jp/2013-05-25-1
ああ中途半端でめんどくさ
2017/12/27(水) 14:38:59.95ID:kb3Qecdj
612は勘違いしてる
変数にpublicも糞も無い
2017/12/27(水) 14:47:08.38ID:K4eQH++r
メンバ変数なんてない
インスタンス変数の事を言ってるならそもそもオブジェクトの外からはアクセスできない
615デフォルトの名無しさん
垢版 |
2017/12/28(木) 23:13:58.27ID:zlcR2/4C
みんな、デバッグはpで済ましてる?
それとも何かツール使ってる?
2017/12/28(木) 23:14:30.42ID:AeGE7eie
は? ppだろ
2017/12/28(木) 23:18:20.87ID:s+AqweGp
自前でpryもどきを作ってbinding.hogeしてる
2017/12/29(金) 02:26:20.85ID:orHgNMeq
awesome-print/awesome_print: Pretty print your Ruby objects with style -- in full color and with proper indentation
https://github.com/awesome-print/awesome_print
619デフォルトの名無しさん
垢版 |
2017/12/30(土) 03:43:26.25ID:Codmlyj+
最近、debug.rb知って使うようになったけど


pで間に合うデバッギングしかまだやってないんだよな
620540
垢版 |
2017/12/30(土) 08:54:20.80ID:M2I24uN0
RubyInstallers の、7-Zip Archives の所からダウンロードした、
Ruby 2.4(x64)は、Rubyのポータブル版の実行環境だった。
Ruby 2.4(x64)は9MB で、解凍すると56MB になった

これだけでも、ファイルI/O など、結構遊べる

デフォルトで、erb, irb, minitest, sinatra などが入っている。
RSpec は入っていないけど

先に、bundler gem を入れて、
VS Code の画面で、Ruby Solargraph という拡張機能を入れると、
solargraph gem がインストールされるので、VS Code で補完ができる

VS Code で、Ruby のデバック用の拡張機能を入れようとすると、
Windows のネイティブコードにコンパイルする必要があるから、
The MSYS2 DevKit を入れる必要がある。
これが、1.7GB もあるらしいので、入れない方が良い

1行ずつデバッグせず、p などで表示しながら作るのが良い

MSYS2 DevKit を入れない範囲で、プログラミングするのが簡単
2017/12/30(土) 13:51:43.29ID:KgXg1sy3
JSON::Stateの挙動がマニュアルと違うのですがこれはバグでしょうか
https://ideone.com/Nd2wBc
https://docs.ruby-lang.org/en/2.4.0/JSON.html
2017/12/30(土) 14:02:41.65ID:8kEk1hAU
あぁ、バグだろうな。
お前のバグだ
2017/12/30(土) 15:07:11.63ID:KgXg1sy3
英語が読めなかったんですね。すみませんでした
マニュアルには「コロンとコンマの区切りの後にspace:で指定した文字列がおかれる」と書いてあります
2017/12/30(土) 15:21:25.29ID:9j+d+4sf
space_before: だろ
2017/12/30(土) 15:22:43.33ID:KgXg1sy3
space_beforeはコロンの直前なので関係ありません
2017/12/30(土) 15:25:29.81ID:9j+d+4sf
リストだからじゃね
2017/12/30(土) 17:05:16.47ID:20iing1R
何しても`,'の後ろには入らないね
バグっていうよりマニュアルの不備なのかな
2017/12/30(土) 17:25:46.52ID:IKvN98q1
,の後ろにスペース入れるのは一般的なフォーマットだから、常識的にはドキュメントの方が正しいでしょ
直してプルリク出せ
629デフォルトの名無しさん
垢版 |
2018/01/02(火) 13:03:30.40ID:nZWiMujw
明けおめ
今年初のRubyスレ書き込み
2018/01/02(火) 22:10:18.61ID:Q+9WD3Xu
新年からRailsを勉強中。環境はwin64 

<%= csrf_meta_tags %>

<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'default', 'data-turbolinks-track': 'reload' %>
</head>

さっきから、こいつに対してExecJS::ProgramError hogehoge#indexってエラーを吐いてばかり

coffee-scciptも1.8.0にしてもさっぱり解決せず。libv8とtherubyracerを入れろとか書いてるけど、
さっきから2時間以上苦戦してるが、全くインストールできずエラーばっかり

何なんだこれ
2018/01/02(火) 22:12:28.67ID:Q+9WD3Xu
違った、viewの中身はこいつだ

<!DOCTYPE html>

<html>

<head>

<title>hogehoge</title>

<%= csrf_meta_tags %>


<%= stylesheet_link_tag "application", media:"all", "data-turbolinks-track"=> true %>

<%= javascript_include_tag "application", "data-turbolinks-track" => true %>

</head>


<body>

<%= yield %>

</body>

</html>
2018/01/02(火) 22:13:36.50ID:NRmrCA2E
今時WinでやるならWSLを使おう
どうせ運用はLinuxなんだからそれに慣れる意味でもな
あと、オワコンCoffeeなんか今更使っちゃダメ
2018/01/02(火) 22:30:29.29ID:Q+9WD3Xu
タイトルでそう思ったけど、ここ初心者スレじゃなかったのか
仕方ない、自分でもうしばらく足掻くか
2018/01/02(火) 22:32:05.53ID:ZaEks4dH
WSL使おうってアドバイスがあるのにさらっと無視するようじゃ、初心者スレ云々の問題じゃないかと思われる
2018/01/02(火) 22:37:12.02ID:IA96dLm2
すべてのwindowsでWSL使えるわけじゃないのに何言ってるの
2018/01/02(火) 22:42:47.77ID:ZaEks4dH
だったらWSL使えないって言えよ
そしたらVMWare使えってアドバイスもらえるんだからさ
2018/01/02(火) 22:44:20.68ID:IA96dLm2
答えのわからない質問に、的はずれな回答しなくていいから
わからないなら黙ってなさい
2018/01/03(水) 00:44:42.35ID:0mS9Giqv
原因わかったよ、鋸使わなかったから
鋸使ったらうまくいった

あとで調べたらWSLは互換性がどうたらとか書いてたし、VM使うほど容量に余裕ないんで
でもまあwindowsよりLinux使えってのが大きなヒントになったのは確か
2018/01/03(水) 00:53:49.79ID:BK81yZAH
互換性はWSLの方が遥かにマシだぞ
WinのRubyなんか動いたらラッキーレベルのおまけ
2018/01/03(水) 06:24:30.41ID:LyakWDNT
>>620
に書いておいた

The MSYS2 DevKit などで、
Windows のネイティブコードにコンパイルしているようなものは、基本的に使えない。
それに、コンパイルできても、正常に動くとは限らないし

Nokogiri などの各gem が、バージョンアップに対応しないから、
Rails 5 などは使えない

各gem を作っている人は、皆手弁当でやっているから、
OS のバージョンアップに一々、対応していられない

Ruby の対応状況と、各gem の対応状況は、全く違うし、作者も別人。
とにかく、gem を使うものは、gem のバージョンに合わせて、
Ruby, Rails のバージョンを下げないといけない

Ruby 使いは、vagrant, chef を使う。
または、WSL, Docker など
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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