Ruby 初心者スレッド Part 66

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 2a2c-RM0q)
垢版 |
2020/01/04(土) 01:15:34.30ID:X7t3Qsuc0
プログラミング言語 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
2020/01/27(月) 17:12:09.11ID:PTqFE7Wm0
ruby.hに#define memcpy(p1,p2,n) ruby_nonempty_memcpy(p1, p2, n)ってあるけど、
c++でstd::memcpyって使ってたらおかしなことにならんか?
123デフォルトの名無しさん (ワイーワ2 FF1f-FkkX)
垢版 |
2020/01/27(月) 17:24:08.84ID:Xu7tzl7qF
srcとdstの範囲が重なってるんじゃね
2020/01/27(月) 18:36:35.04ID:PTqFE7Wm0
ちょっと試したらおかしなことにならんかった
2020/01/28(火) 12:37:06.71ID:2llLtotp0
Rubyってイベントハンドラを複数登録するタイプのクラスってどう書くのが一般的な流儀ですか?

クラス継承したり特異メソッド使ったりといった書き方もありますが
あまり異端過ぎなければlambdaを使うのが楽そうかなと思ってます

# ディレクトリを巡回してファイルを探すクラス
finder = FileFinder.new
finder.on_dir_enter = lambda{|folder| puts "entered: #{folder}" }
finder.on_dir_leave = lambda{|folder| puts "left: #{folder}" }
finder.on_file_found = lambda{|file| puts "found: #{file}" }
finder.start("./")
126デフォルトの名無しさん (ワッチョイ 5fd7-hH+D)
垢版 |
2020/01/28(火) 16:48:55.02ID:viNuqCMy0
>>125

finder.on_dir_enter {|folder| puts "entered: #{folder}" }
finder.on_dir_leave {|folder| puts "left: #{folder}" }
finder.on_file_found {|file| puts "found: #{file}" }

または

finder.add_handlers(
  :dir_enter => proc { |folder| puts "entered: #{folder}" },
  :dir_leave => proc {|folder| puts "left: #{folder}" },
  :file_found => proc {|file| puts "found: #{file}" }
)

イベントハンドラ系のAPI設計に関しては、
Ruby/Tk や Ruby-GNOME 等の GUI ツールキットを参考に
2020/01/28(火) 17:18:24.30ID:nzUBCcWX0
特に理由がなければブロック渡しが一般的
簡単なEvent Emitterを自作するかライブラリ使うか

finder.on(:dir_enter) {|folder| puts "entered: #{folder}" }

ライブラリでメジャーなのはwisperかActiveSupport::Notifications
https://github.com/krisleech/wisper
2020/01/29(水) 09:22:00.90ID:AYOCyHQA0
>>121
rubyXL での印刷範囲の設定など
https://qiita.com/cog1t0/items/85bf12f07b78e66802ff

「rubyxl 印刷」で検索!
129デフォルトの名無しさん (ワッチョイ ea2c-KoMo)
垢版 |
2020/01/29(水) 13:41:46.66ID:AYOCyHQA0
Windows で、Ruby 2.5 にバージョンアップしたら、
SQLite3 のコンパイルが必要になった!

でも漏れは、1, 2GB とサイズが大きい、MSYS2 を入れていないから、
win32ole モジュールで、ADODB でアクセス出来そうです。

ADODBは、Microsoft 製のドライバーなのか。
わざわざ、SQLite3用のドライバーも作ったのか?w

win32oleは、Rubyの標準モジュールかw
COM の種類が多い

ruby -rwin32ole -e 'puts WIN32OLE_TYPE.progids.length'
#=> 2521
2020/01/29(水) 14:03:59.52ID:AYOCyHQA0
>>129
訂正

>ADODBは、Microsoft 製のドライバーなのか。
>わざわざ、SQLite3用のドライバーも作ったのか?

SQLite3 などのODBC ドライバーは、Microsoft 製じゃない。
誰かが作ったものです
131デフォルトの名無しさん (ワッチョイ 7f05-QQjh)
垢版 |
2020/02/07(金) 23:21:28.28ID:t9uaVZtz0
RubyのOcraについて質問です。

無限ループの中でタイマーカウント満了の度に処理を行って待ちに入るという動作のプログラムって実はEXE化できないという制約があったりしますでしょうか?

また、その場合の解消方法とかをご存じの方、よろしくお願い申し上げます。
2020/02/08(土) 10:32:17.79ID:hHzEGlOhr
>>131
ない
何故ならevalするだけの簡単なコードですらexe化できるから
2020/02/08(土) 13:28:21.15ID:9Nn74D/R0
OCRA の代わりに、Neri と言うのもあるみたい

Neri
https://github.com/nodai2hITC/neri/blob/master/README.ja.md
134デフォルトの名無しさん (ワッチョイ 9f7c-YOmB)
垢版 |
2020/02/10(月) 17:54:32.25ID:nkCUteta0
下記のコードでifの位置ってここでいいの。rubyの本の記述なんだけど。
2行目だけどifの方が左なんじゃないの?右でも行けるって事かな?
def greeting(country)

return 'countryを入力してください' if country.nil?
if country == 'japan'
   'こんにちは’
  else
'hello'
end
end

greeting(nil)
greeting('japan')
135デフォルトの名無しさん (ワイーワ2 FFdf-VM48)
垢版 |
2020/02/10(月) 17:55:54.47ID:JljXo4cdF
後置
136デフォルトの名無しさん (ワッチョイ 9f7c-YOmB)
垢版 |
2020/02/10(月) 18:40:17.86ID:nkCUteta0
>>135
そうなの?
理由も聞きたい
そういう仕様?って事?
2020/02/10(月) 20:46:54.23ID:cKG4UD690
わからない時はまずリファレンス
https://docs.ruby-lang.org/ja/master/doc/spec=2fcontrol.html#if

ifは前置でも後置でもいける仕様
後置ifは正式にはif修飾子(if modifier)
2020/02/10(月) 21:36:49.68ID:cuubi2Q/0
しかし、何がしたいのかはわからんコード。
文字列を返してるだけ?
2020/02/10(月) 23:17:58.15ID:8D13KkA50
そりゃ、ユーザーからの入力値チェックは、必要

まあ、デフォルト値は、nil の代わりに、空文字列にしておく手もある
2020/02/11(火) 00:09:12.87ID:dIRIcC/n0
>>136
英語勉強しろよ

I don't know if it will rain tomorrow.
(明日雨が降るかどうかわからない)
2020/02/11(火) 07:38:12.35ID:jcgFHncna
後起きifはRubyの文法的にはかなり無理があって、その実現のためだけにRubyが「全てが式」ではなくなっているという極めて特殊な構文
Matz的によほどの拘りがあるんだろうけど、違和感を感じる>>134のセンスはとても正しい
2020/02/11(火) 09:49:56.57ID:GpQNLMm40
perl後継としては外せない
2020/02/11(火) 10:04:30.75ID:Nq1ZGiCx0
perlなら当然でしょ
rubyはそこを汲んでる
2020/02/11(火) 10:14:08.59ID:dIRIcC/n0
Perlに不満ってあるの?
どれだけある?
145デフォルトの名無しさん (アウウィフ FF9b-VM48)
垢版 |
2020/02/11(火) 12:56:14.55ID:KtXysiBKF
>>141
Rubyのあちこちで見受けられるPerlの悪い所をわざわざパクったアホな例の一つだな
2020/02/11(火) 13:01:20.53ID:v/oRLdRM0
>>141
>その実現のためだけにRubyが「全てが式」ではなくなっているという極めて特殊な構文

「全てが式」ってのはstatementとexpressionに明確な区別のある言語との対比で
Rubyの特徴をわかりやすく説明するために使われてるだけ

式の一部どれをとっても全てが式になってるまともな言語があるわけない
Rubyには後置以外の修飾子だってあるしstatementもある
中途半端な知識で勘違いしてドヤるのはやめよう
2020/02/11(火) 13:17:51.03ID:D5vn67vCa
perl に比べて ruby の優っているところは?
2020/02/11(火) 13:22:48.99ID:XWZwag4pr
if/unless, while/until, rescue
2020/02/11(火) 13:27:43.83ID:eT6ZDI7H0
>>147
Perlにはオブジェクト指向ようの構文が後付で原始的なものしか搭載されてない。
アセンブラを駆使すれば何でもできるように、原始的な機能でも頑張れば
高度なオブジェクト指向機能を作ることは可能だが、
そのせいでいくつもの実装が生まれライブラリごとに使ってる
仕組みが異なり統一ができずに破綻してしまった。
Rubyは最初からオブジェクト指向
150デフォルトの名無しさん (ワッチョイ 9f74-cN98)
垢版 |
2020/02/11(火) 14:28:51.94ID:R1PPlg5z0
>>146
>式の一部どれをとっても全てが式になってるまともな言語があるわけない

LISP, Haskell, ML, …etc

>中途半端な知識で勘違いしてドヤるのはやめよう

この記事の原著者も「中途半端な知識で勘違いしてドヤ」ってるのかなぁ
・Rubyによる関数型プログラミング
 http://xtmlab.com/misc/FPwithRuby.html

なお、手続き型言語の大半が文と式を明確に分けている中で、
Ruby の「すべてが式」という思想はユニークであるが、
次世代言語 Rust でも同様な思想が採用された
以下は書籍「プログラミングRust」からの引用
> Rustはいわゆる式言語(expression language)の一つだ。
> つまり、Lispにまで遡る古い伝統に従い、すべてを式で行う。

中途半端な知識で勘違いしてドヤると恥をかくだけだよ
2020/02/11(火) 18:41:16.57ID:v/oRLdRM0
>>150
>LISP, Haskell, ML, …etc

おまえアホやろ
Lispの閉じ括弧は式なのか? シングルクウォートは式なのか?Haskellのコロンは式なのか?
if修飾子が式じゃない極めて特殊()な構文って主張はそれと同じレベルなんだけど

>この記事の原著者も「中途半端な知識で勘違いしてドヤ」ってるのかなぁ
「あらゆるすべてが式である」のすべてに何が含まれて何が含まれないのか理解してるかどうかだよ
原著者が理解してるかどうかは知らないけどお前は間違いなく理解してない

ついでに言っておくとRubyの「全ては式」が広まったのはDavid Flanaganが「The Ruby Programming Language」で他言語出身者にわかりやすく理解させるためにそれっぽいことを書いたのが理由
152デフォルトの名無しさん (ワッチョイ 9f74-cN98)
垢版 |
2020/02/11(火) 22:59:40.20ID:R1PPlg5z0
>>151
文節「すべてが式」に対する君の認識が、世間の一般常識から乖離していることを理解した
2020/02/12(水) 00:01:32.50ID:39kCYFWR0
>>152
keywordやsymbolそれ自体が式なわけないだろ?
それと同じことを主張してたの理解できたのかな?

制御構造のif式だって`if 式; end`全体で式として評価されるわけで
ifだけやendだけが式になるわけじゃない

if修飾子は`式 if 式`全体で式として評価されるわけで
後置の`if 式`だけで式になるわけじゃない

でその一部を取り出して
「その実現のためだけにRubyが「全てが式」ではなくなっているという極めて特殊な構文」
って言っちゃうのがどれだけ的外れかって話な
154デフォルトの名無しさん (ワッチョイ a701-9iBN)
垢版 |
2020/02/12(水) 01:40:12.18ID:3IloEGU30
電卓の構文解析器を作ったことがあれば、だいぶご意見が変わるはず。
155デフォルトの名無しさん (ワッチョイ ef1d-sg8N)
垢版 |
2020/02/12(水) 01:51:46.06ID:CB9IiDBv0
実務経験1年で月収80万稼げるエンジニアになった理由
https://www.youtube.com/watch?v=DrbbyGsHQic
意識が低いエンジニアこそフリーランスになれ
https://www.youtube.com/watch?v=nSEaAJlgjbQ
フリーランスエンジニアの週3労働ってどんな感じ?
https://www.youtube.com/watch?v=8yjoDCdbzMc
ぼくがスキルのない社畜ならこうやって脱する
https://www.youtube.com/watch?v=aae8xxbUlMM
初めて人を雇ったらもう二度とサラリーマンをやりたくないと思った話
https://www.youtube.com/watch?v=U0OCGRVLFsM
プログラミングは文系でも余裕で出来ます!理由を現役プログラマーが解説
https://www.youtube.com/watch?v=iBOeiSKBIW8
貧乏人こそ社会不適合者
https://www.youtube.com/watch?v=O3BT72BIBJI
元ド貧乏が教える】貧乏を抜け出すための2つの考え方
https://www.youtube.com/watch?v=IRrCgTy3ckc
より良いオファー貰ってるのに転職しないとか何考えてるの?
https://www.youtube.com/watch?v=i0J6uRhlj7o
2020/02/12(水) 02:31:04.61ID:zXn0/Xf90
>>153
もう黙ったほうがええで。
アホが漏れとる。
157150および151 (ワッチョイ 7274-XNsy)
垢版 |
2020/02/12(水) 03:15:58.26ID:1hwSKrXM0
>>153
>でその一部を取り出して
>「その実現のためだけにRubyが「全てが式」ではなくなっているという極めて特殊な構文」
>って言っちゃうのがどれだけ的外れかって話な

自分は>>141ではないが、いったいぜんたい何を話したいのか訳がわからんよ
2020/02/12(水) 06:32:46.81ID:m8mhjAm70
>>155
グロ
2020/02/12(水) 09:42:28.21ID:gfctBwevM
「Rubyでは全てが式だ」というとき、ステートメント(文)と式の区別がないことを意味するのが普通だ
言語によってはメソッドやクラスの定義も普通の式だったりするが、Rubyでそう思っている奴はいないだろう
しかしRubyではステートメントと式の区別がないというのは厳密には正しくない
文法定義のソースを見れば明らかだが、それが後置構文の存在のためであるのは事実
2020/02/12(水) 22:16:17.93ID:Pa88PYmd0
def foo(arg)
arg + 1
end(99) #=> 100
動かない
2020/02/13(木) 10:51:24.11ID:6MxuLkX50
p send(def foo(a); a + 1;end, 99) # => 100
2020/02/13(木) 21:55:21.77ID:i9bfivOD0
お、うーむ...なるほど
2020/02/13(木) 22:02:31.32ID:TNGg/IHkr
p def foo(a)
  a + 1
end.then{|s| method(s)[99]}

# => 100
2020/02/13(木) 23:08:11.62ID:0ZbbVgVA0
つまり、扱いは同じではない、ということかな?w
2020/02/13(木) 23:20:32.77ID:oR70BErs0
foo = -> (arg) {
arg + 1
}.( 99 ) #=> 100
166デフォルトの名無しさん (ワッチョイ 122c-LiuO)
垢版 |
2020/02/14(金) 12:22:11.03ID:+9NDg3r60
( ) で囲んで式にすれば、
JavaScript のIIFE (Immediately Invoked Function Expression; 即時実行関数式)みたいに、無名関数にできた!

( -> (arg) {
puts arg + 1
} ).( 99 ) #=> 100
2020/02/14(金) 12:36:32.48ID:+9NDg3r60
msys2 無しのWindows 10, Ruby 2.5 で、
WEBrick::HTTPServlet::CGIHandler は使えない!

ERROR CGIHandler:
C:/Ruby25-x64/lib/ruby/site_ruby/2.5.0/ruby_installer/runtime/msys2_installation.rb:63:in `iterate_msys_paths':
undefined method `split' for nil:NilClass (NoMethodError)

エラーログに、enable_dll_search_paths とあるから、dll でも使うのかな?
2020/02/14(金) 17:39:20.53ID:EOtBZfN80
>>166
>( ) で囲んで式にすれば、

括弧なくても定義したlambdaが返される
.()でそのlambdaのcallメソッドを呼び出してるだけ
-> (arg) { arg + 1 }.(99) でも
-> (arg) { arg + 1 }[99] でも
-> (arg) { arg + 1 }.call 99 でも同じ

ちなみにJSのvar foo = (x)=> x+1 みたいなのは関数に名前はついてないので無名関数だぞ
rubyで foo = -> (arg) { arg + 1 } と書いても
無名のlambdaをfooという変数に入れてるだけで
lambda自身に名前がつくわけではない
2020/02/15(土) 13:46:02.32ID:BIOI8zPQ0
>>167
ENV['PATH'].split(";")が失敗するってmsys2関係なくなかなかレアな環境だと思うが
環境変数をクリアしたりしてるのかい?
170167 (ワッチョイ 122c-LiuO)
垢版 |
2020/02/15(土) 17:09:24.91ID:8drC8DpT0
msys2 を入れずに、Ruby を使っているから、
コンパイルできないし、Windows 10 のネイティブDLL を使えない

Ruby 2.5 で、SQLite も使えなくなったw

WEBrick は、Rubyで実装されているから、msys2 無しでも動くと思ったけど、
WEBrick::HTTPServlet::CGIHandler で、ネイティブDLLを使っているのだろう

rubyist magazine を冒頭から読み始めたが、読み応えある!
2020/02/16(日) 02:30:58.30ID:A+9IORaN0
>>170
msys2_installation.rb:63にmsys2関係ないって
https://github.com/oneclick/rubyinstaller2/blob/rubyinstaller-2.5.0-1/lib/ruby_installer/build/msys2_installation.rb#L63
これが失敗するのは環境変数がおかしいか、上書きしているか
それともENVを再定義しているくらいしか思いつかない
172167 (ワッチョイ 122c-LiuO)
垢版 |
2020/02/16(日) 19:14:49.59ID:5EL9p8ON0
漏れは、Windows 10,Ruby 2.5 で、
Run ‘ridk install’ to install MSYS2 and development toolchain. も、チェックしていないし、
MSYS2 の開発ツールと、MINGW のコンパイラもインストールしていないから

Rubyの環境構築(Windows10編)
https://www.kenschool.jp/blog/?p=3898

エラーログ

C:/Ruby25-x64/lib/ruby/site_ruby/2.5.0/ruby_installer/runtime/msys2_installation.rb:63:in `iterate_msys_paths': undefined method `split' for nil:NilClass (NoMethodError)\r\n\t

from C:/Ruby25-x64/lib/ruby/site_ruby/2.5.0/ruby_installer/runtime/msys2_installation.rb:76:in `msys_path'\r\n\t

from C:/Ruby25-x64/lib/ruby/site_ruby/2.5.0/ruby_installer/runtime/msys2_installation.rb:89:in `mingw_bin_path'\r\n\t

from C:/Ruby25-x64/lib/ruby/site_ruby/2.5.0/ruby_installer/runtime/msys2_installation.rb:99:in `enable_dll_search_paths'\r\n\t

from C:/Ruby25-x64/lib/ruby/site_ruby/2.5.0/ruby_installer/runtime/singleton.rb:27:in `enable_dll_search_paths'\r\n\t

from C:/Ruby25-x64/lib/ruby/2.5.0/rubygems/defaults/operating_system.rb:3:in `<top (required)>'\r\n\t

from C:/Ruby25-x64/lib/ruby/2.5.0/rubygems.rb:1383:in `require'\r\n\t

from C:/Ruby25-x64/lib/ruby/2.5.0/rubygems.rb:1383:in `<top (required)>'\r\n\t

from <internal:gem_prelude>:2:in `require'\r\n\t

from <internal:gem_prelude>:2:in `<internal:gem_prelude>'\r\n
2020/02/17(月) 01:04:16.59ID:gpbv7rcq0
あー、WebrickのCGIHandlerはCGIPathEnvの関係でENV["PATH"]がnilになりうるのか
WEBrick::HTTPServer.newに渡すハッシュにCGIPathEnv: ""を加えとけばいいはず
2020/02/17(月) 01:35:30.73ID:A9t7x7q20
ありがとう。
オプションに、:CGIPathEnv => '' を加えたら、正常に動いた!

すごい実力じゃん!
ソースコードを追っていったの?

opts = { :CGIInterpreter => "C:/Ruby25-x64/bin/ruby.exe",
:CGIPathEnv => '', # msys2 のエラーを避けるために、必要!
:DocumentRoot => './', # この指定が必要!
:BindAddress => '127.0.0.1', :Port => 20080 }

srv = WEBrick::HTTPServer.new( opts )
2020/02/17(月) 05:37:18.50ID:SykEsoD4r
なんかムカつく
176デフォルトの名無しさん (ワッチョイ d62d-qw96)
垢版 |
2020/02/17(月) 15:17:53.59ID:9CP/4dwv0
新しくて安い本が出たので、頭の体操にRubyの勉強を始めたところなんだけどさあ
よくネット上に、「Railsの本をやってからRubyの勉強をした」みたいな人がいるのはどういうことなの?
RailsってRubyが出来ないと何も出来ない訳でもないの???
2020/02/17(月) 15:33:27.23ID:qj5C8HtX0
普通にプログラミングできる人にとっては言語の違いなんて些細なもので
いちから作るのならともかく、そこいらにあるRailsのコードや自動生成されたものを
見ればそこからRubyという言語を推測で理解できるんだよ。
このコードがクラス定義だな。Rubyではこう書くんだなって
わからなければそこだけググればいい

Railsはやり方というものがあるので、それに合わせるように
Railsの本を見て流れを把握する必要がある。

検索は断片を見つけるのはキーワードから簡単に見つけられるが
流れはそうはいかない。だいたいの本はページの最初から流れを
そのまま書いてあるから、本でざっと勉強するのが最初のうちは手っ取り早い
178デフォルトの名無しさん (ワッチョイ d62d-qw96)
垢版 |
2020/02/17(月) 18:20:35.95ID:9CP/4dwv0
そういうことか
言語だけ先にやると変な癖がついたりもするし、演習ファーストの学習も結構いいかもな
179デフォルトの名無しさん (ワッチョイ b7d2-Htok)
垢版 |
2020/02/17(月) 18:45:44.78ID:wxeqwMT50
日本語の勉強がしたいと言ったら
舞城王太郎の小説を読めと言われた気分
2020/02/17(月) 19:30:14.53ID:A9t7x7q20
たぶん、すでに多言語を知ってる人だろう

入門書の次のレベルの、新しい本が出た!
Ruby on Rails 6 実践ガイド、黒田努、2019/12/20

実践Ruby on Rails 4: 現場のプロから学ぶ本格Webプログラミング、黒田努、2014
この本を書き換えたもの

無料のRails チュートリアルよりは簡単

Windows プロ版のDocker が不安定だから、Virtual Box, Ubuntu 18.04 でやってる!
181デフォルトの名無しさん (ワイーワ2 FF6a-BDVY)
垢版 |
2020/02/18(火) 12:16:06.30ID:r+eOvEZJF
またカタワを量産するつもりか
RailsRubyの将来は暗いな
182デフォルトの名無しさん (ワッチョイ ff2c-lQWV)
垢版 |
2020/02/25(火) 19:09:01.56ID:Ykw6mmDG0
「aabc → bc」みたいに、先頭から特定の文字が連続するとき、それを除去するには、どう書く?
正規表現を使ったものと、使っていない場合の両方

str = "aabc"

# 先頭から続く、a を除去する
while str.start_with? "a" # 先頭文字が、a なら
str.slice! 0 # 先頭文字を削除する
end

p str #=> "bc"
2020/02/25(火) 20:42:26.89ID:uCkT0+w20
そりゃ正規表現のステートマシン通りに書くでしょ
2020/02/25(火) 22:00:57.29ID:uBU1PACqr
>>182

puts str[/\Aa*\K.*/] # => bc
2020/02/25(火) 22:07:44.86ID:uBU1PACqr
>>182

puts str[str.size.times.find{|i| str[i] != ?a}..] # => bc
2020/02/25(火) 22:22:39.72ID:oSeHo6cg0
>>182
def remove_consecutive(string)
string.sub(/^(.)¥1{1,}(.*)$/) {|_| remove_consecutive($2)}
end

remove_consecutive("aaaabbbbbbccab") #=> “ab”
remove_consecutive("1112234") #=> "34"
2020/02/25(火) 22:59:04.49ID:/XslCVsc0
本当に文字列から連続部分を除去したいのか、
連続部分の後ろが取り出せればいいのか
2020/02/25(火) 23:54:26.45ID:Ykw6mmDG0
元々は「0082 → 82」みたいな文字列の先頭から続く、0 を除去したかった。
先頭以外のものは、除去しなくてよい

こういうメソッドが無いか、探してみたけど見つからなかった

レシーバーの破壊的な変更をしてもよいし、別の文字列を作って返すものでもよい
2020/02/26(水) 00:52:55.60ID:TmIxTRKQ0
文字列の先頭から続く、特定の文字を除去する

1文字でも除去するし、連続するかぎり除去するが、
先頭以外のものは、除去しなくてよい

a を除去する場合

abc → bc
aaXaa → Xaa
2020/02/26(水) 01:11:17.25ID:sMj0eedP0
>>188
>元々は「0082 → 82」みたいな文字列の先頭から続く、0 を除去したかった。
“0082”.to_i.to_sでよくね?
なんかこのパターン数ヶ月前にも見たような気がするな

>>189
def remove_leading_chars(string, char)
string.each_char.drop_while{|c| c == char}.join
end

remove_leading_chars(“0000123", “0”) #=> "123"
remove_leading_chars(“abc", “a”) #=> "bc"
remove_leading_chars(“aaXaa", “a”) #=> "Xaa"
2020/02/26(水) 04:46:15.55ID:TmIxTRKQ0
>“0082”.to_i.to_sでよくね?

長い文字列だと、数値化できない言語もあるから、
汎用的に作れないかなと思って
2020/02/26(水) 08:06:23.34ID:PiyizPRV0
だからオートマトンで作れって言ってんじゃん
ttps://image.slidesharecdn.com/1-140715084054-phpapp01/95/1-11-638.jpg
2020/02/26(水) 08:22:48.67ID:kXv4PxDr0
オートマトンってなんで羊なんだろう?
自動的に毛を刈って自動的に料理されるのか?
2020/02/26(水) 08:29:53.13ID:bDSWeqSr0
オートマンだと思ってた
インド哲学かよ
2020/02/26(水) 08:36:52.65ID:kXv4PxDr0
嘔吐マトン
196デフォルトの名無しさん (ワッチョイ 03d2-Cv5o)
垢版 |
2020/02/26(水) 12:11:34.52ID:GrI3XnzJ0
>>189
def ltrim(s, c)
s[/^#{c}*/] = ""
s
end
p ltrim("aaaabcaabc", 'a')

"bcaabc"
2020/02/26(水) 23:09:06.75ID:TmIxTRKQ0
Ruby on Rails 6 実践ガイド、黒田努、2019/12/20

Ruby on Rails 6 超入門、掌田津耶乃、2020/2/21

巨匠・掌田も、Rails 6 に参戦!

後は、山田祥寛・WINGSプロジェクトが、どうするか?
198デフォルトの名無しさん (ワイーワ2 FF82-7qQN)
垢版 |
2020/02/27(木) 15:17:58.32ID:G6pyHvdgF
掌田の本は要らん
2020/02/28(金) 09:49:01.76ID:tB/cuWAa0
掌田津耶乃って何者? (Late 2012)
https://egg.5ch.net/test/read.cgi/mac/1349360916/

巨匠か?
Mac凋落と共に仕事を失った人間、とか書かれてんぞ
2020/02/28(金) 09:53:35.23ID:tB/cuWAa0
掌田津耶乃って何者?
https://mentai.5ch.net/test/read.cgi/pc/971599471/

macの賤民思想に凝り固まった人間?
そんな物体なら要らないな
201197 (ワッチョイ ca2c-rVtL)
垢版 |
2020/02/28(金) 13:58:28.72ID:GfVfgYuK0
多言語の3強が、掌田津耶乃・山田祥寛(WINGSプロジェクト)・柴田望洋。
他に、スッキリ・やさしい・猫でも・独習など

掌田は、その中でも断トツ!

多言語の入門書・フレームワーク・ゲームエンジンなど、
ここ数年で、20冊とかある

世界的に見ても、断トツ!
2020/02/28(金) 14:40:57.13ID:LkDsYiUy0
何か後ろの二人が気の毒
203デフォルトの名無しさん (ワッチョイ 9e2d-9Aak)
垢版 |
2020/02/28(金) 15:39:11.30ID:Y4GSbUWj0
Rubyはもう本で勉強するのは古い
今は迫 佑樹とかあおいとかのオンラインコースで勉強する時代だよ、
2020/02/29(土) 02:55:28.33ID:udUacP9j0
山田祥寛は10年近く前C#でよくお世話になった
他言語から来た入門者に程よくわかりやすい本を書く印象

柴田望洋はC言語系で何冊か読んだが
内容がすごく簡潔で短い時間でまとめ的な知識を頭に入れたり
特定のトピックを復習したいときには有用
(ただ今ならWebサイトで代用可能)

掌田津耶乃・・・
本屋で間違って手にしてもパラっと読めば速攻本棚に戻すやつ

似たような浅めの入門本著者だと
クジラ飛行机のやつは実践的なやつが多くて悪くないと思う
205197 (ワッチョイ ca2c-rVtL)
垢版 |
2020/02/29(土) 23:32:52.49ID:6IdZMwnf0
なでしこの作者・クジラ飛行机は、
近年、Python から、多言語の作者として乱入してきた

なでしこだけでは食えないし、やむを得ない方向転換w

巨匠の柴田望洋は「新・明解C言語」のイメージだけど、近年、多言語に参入した
2020/02/29(土) 23:43:57.15ID:c0ztbNyQ0
>>204
新独習c# は旧独習ハーバートシルトと比べてどうでしょうか?
新独習Java は、旧独習が史上稀に見る惨憺たる出来だったことから、新独習はよくなるしかないと予測しています
あと、旧独習を高く評価している私としても新独習C++ については興味がありますね
2020/03/01(日) 00:44:56.42ID:NSpMdQYF0
さすがに日本人で、シルトと比べられる著者は、いないだろ

たいてい読み応えがあるのは、Effective シリーズなどの外人著者
208デフォルトの名無しさん (ワイモマー MMea-W44n)
垢版 |
2020/03/01(日) 10:00:51.93ID:JWAFHnbAM
しつもんです
haskellだったら
[(x,y,z) | x <- [1..9], y <- [1..9], z <- [1..9], x * y * z == 24]
こう書けるものはrubyではせいぜい
p [*1..9].repeated_permutation(3).select {|a| a.sum == 24}
こう書くしかありませんか?簡潔に表現したいです

さらにhaskellでは
[(x,y,z) | x <- [1..9], y <- [1..8], z <- [1..7], x * y * z == 24]
などと書けるので柔軟ですがその場合rubyなら
p (1..9).map {|x| (1..8).map {|y| (1..7).map {|z| [x,y,z]}}}.flatten(2).select {|a| a.sum == 24}
こう書くしかありませんか?簡潔に表現したいです
2020/03/01(日) 10:43:49.36ID:n6wzTSL90
> haskellだったら
> [(x,y,z) | x <- [1..9], y <- [1..9], z <- [1..9], x * y * z == 24]
> こう書けるものは

haskell: 66文字

> rubyではせいぜい
> p [*1..9].repeated_permutation(3).select {|a| a.sum == 24}
> こう書くしかありませんか?簡潔に表現したいです

ruby: 58文字


Rubyの方が簡潔です
2020/03/01(日) 11:35:40.57ID:qmcGlirD0
> p (1..9).map {|x| (1..8).map {|y| (1..7).map {|z| [x,y,z]}}}.flatten(2).select {|a| a.sum == 24}
p [[*1..9], [*1..8], [*1..7]].then{|x, *a| x.product(*a)}.select{|a| a.sum == 24}
p [*1..9].product([*1..8],[*1..7]).select{|a| a.sum == 24}

好きな方を

ところで、そのHaskellコードにはp相当が無いように見えますが
Haskellってprintしなくていいんですか?
2020/03/01(日) 12:14:22.10ID:8hJkpeX/a
元から間違っているがsumではない
2020/03/01(日) 12:53:48.43ID:JWAFHnbAM
あごめんsumじゃなかったわw
みなさんどうもありがとうございました
213デフォルトの名無しさん (ワッチョイ 067d-X91k)
垢版 |
2020/03/01(日) 18:13:12.70ID:RW98tzZT0
rubyでtwitterとかyoutubeどうやって作るの?
全くイメージが沸かない
ツイートがリアルタイムで他者にも表示されるのってどういう仕組み?
2020/03/01(日) 21:01:11.61ID:QPyt1UlH0
httpとブラウザの仕様の話なのでrubyは関係ない
2020/03/01(日) 21:57:35.00ID:F2v5Atsqa
scaffold で一発で作るという意味だろう
2020/03/01(日) 22:44:11.42ID:NSpMdQYF0
0から手を動かして作るRailsチャットアプリ【チュートリアル】
ttps://www.youtube.com/watch?v=WCsgcp5dg7M

Ruby on Rails で、Web Socket を使う、とだこうきの動画
2020/03/01(日) 22:47:44.78ID:QZXNPr7ra
>>213
JavaScriptでサーバー側のAPIを叩き、サーバーがそれに対して結果を返し、JavaScriptでその結果を画面に反映させる
基本はこれだけ
Rails任せじゃなくてちゃんとWebの仕組みを理解してAPIを実装しなきゃいけないし、JavaScriptもゴリゴリ書かなきゃいけない
SQSなどのAWSやGCPのマネージドサービスや、Kafkaのようなデータ基盤系のOSSなど高度なバックエンド技術の活用も必要だ
Railsのチュートリアルに毛が生えたような典型的なWebとは次元が違う
2020/03/01(日) 23:24:11.39ID:J3IrN4Ey0
クライアントがブラウザとは限らないが
いずれにしろrubyは全く関係ない

web push
server-sent events
push notification service (e.g. APNs)

↑この辺りを学べばいい
単なる通知用途で生のweb socketを
ゴリゴリ書いたりはしないんじゃないかな
2020/03/01(日) 23:52:21.24ID:H/U8nx/nM
プログラミングスクールでRails勉強しました系だとプル型のアプリの作り方しか知らないだろうから、クライアントへの通知の実装方法以前に、
そもそもユーザーがツイートしたときに受信者に対して通知をキックするところの仕組みが想像できないんだろうな
そのへんはいわゆるバックエンドってやつで、ユーザー数が増えてもスケールするためには小手先のコーディングだけでなくAWSのインフラ設計まで含めた作り込みが必要
Railsできますウェーイみたいなのとは一線を画す、いい大学出たガチな連中が鎬を削ってる世界だ
2020/03/02(月) 00:40:51.77ID:8PHDRupm0
Ruby による今世紀最大の起業家、Vagrant のMitchell Hashimoto(HashiCorp)も、
Go のTerraform へ行った

今や主戦場は、Docker, Kubernetes になった

でも、サーバーの基本は、Ruby。
Node.js も、Rubyのコピーだから

Spring Boot も、Rails のコピー
2020/03/02(月) 01:33:56.26ID:AuxsFe1o0
>>217
>>219
おまえもウェーイ系なのに無理してレスすんな
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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