プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
Ruby on RailsについてはWEBプログラミング板で
前スレ
Ruby 初心者スレッド Part 60
https://mevius.2ch.net/test/read.cgi/tech/1493398918/
るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
逆引きRuby
http://www.namaraii.com/rubytips/
探検
Ruby 初心者スレッド Part 61 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2017/08/25(金) 15:59:11.22ID:HsL9LVKJ
2017/08/25(金) 16:05:20.69ID:0nrK3Ckt
大規模障害記念
2017/08/25(金) 16:05:48.85ID:HsL9LVKJ
たのしいRuby 第5版、2016
Effective Ruby、2015
メタプログラミング Ruby 第2版、2015
Rubyのしくみ、2014
改訂3版 基礎 Ruby on Rails、黒田努・佐藤和人、2015
リファクタリング:Rubyエディション、2010
Effective Ruby、2015
メタプログラミング Ruby 第2版、2015
Rubyのしくみ、2014
改訂3版 基礎 Ruby on Rails、黒田努・佐藤和人、2015
リファクタリング:Rubyエディション、2010
2017/08/25(金) 16:10:23.56ID:HsL9LVKJ
ギリセーフで間に合った
2017/08/25(金) 16:11:37.65ID:sLUvaIRs
6デフォルトの名無しさん
2017/08/25(金) 16:12:33.08ID:BwHFndLq each_with_object
なんて初めて見た。
a=[[1,2],3,4,5,[6,7],8,[9,10],[11,12],[13,14]]
b = a.each_with_object([[],[]]) {|(x, y), acc| acc[0] << x; acc[1] << (y || x) }
p b # => [[1, 3, 4, 5, 6, 8, 9, 11, 13], [2, 3, 4, 5, 7, 8, 10, 12, 14]]
なんて初めて見た。
a=[[1,2],3,4,5,[6,7],8,[9,10],[11,12],[13,14]]
b = a.each_with_object([[],[]]) {|(x, y), acc| acc[0] << x; acc[1] << (y || x) }
p b # => [[1, 3, 4, 5, 6, 8, 9, 11, 13], [2, 3, 4, 5, 7, 8, 10, 12, 14]]
7デフォルトの名無しさん
2017/08/25(金) 16:18:41.59ID:BwHFndLq evens = (1..10).each_with_object([]) {|i, a| a << i*2 }
# => [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
each_with_objectってのは引数一個(空の配列)とブロックを取るみたい。
ブロックには、引数が2つ渡り、最初は、列挙される要素、2番目は引数(空の配列)が渡るらしい。
ブロックの戻値がeach_with_objectの戻値かな?
# => [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
each_with_objectってのは引数一個(空の配列)とブロックを取るみたい。
ブロックには、引数が2つ渡り、最初は、列挙される要素、2番目は引数(空の配列)が渡るらしい。
ブロックの戻値がeach_with_objectの戻値かな?
8デフォルトの名無しさん
2017/08/25(金) 16:25:39.04ID:BwHFndLq a=[[1,2],3,4,5,[6,7],8,[9,10],[11,12],[13,14]]
p a
a.each{|(x, y)| puts "x = " + x.to_s + "y = " + y.to_s}
このtupleみたいな(x, y)ってのは何だ?
Rubyにtupleがあるのか?
p a
a.each{|(x, y)| puts "x = " + x.to_s + "y = " + y.to_s}
このtupleみたいな(x, y)ってのは何だ?
Rubyにtupleがあるのか?
2017/08/25(金) 16:26:35.62ID:4MOWRfGQ
ブロック中での最後の評価値、じゃないのがこれの使い易いところ
戻り値には、each_with_object(ここのオブジェクト)を返す
injectでやろうとして
b = a.inject([[],[]]) {|acc, (x, y)| acc[0] << x; acc[1] << (y || x); acc}
ブロックの最後でこうやってaccを返そうとして頑張っちゃうような時には考えたい
戻り値には、each_with_object(ここのオブジェクト)を返す
injectでやろうとして
b = a.inject([[],[]]) {|acc, (x, y)| acc[0] << x; acc[1] << (y || x); acc}
ブロックの最後でこうやってaccを返そうとして頑張っちゃうような時には考えたい
10デフォルトの名無しさん
2017/08/25(金) 16:30:33.90ID:BwHFndLq よく判らんが、要素2個の配列をブロックの引数で(x, y)って受け取れば、
2個の要素はx,yとして受け取れるらしい。
2個の要素はx,yとして受け取れるらしい。
11前スレ996
2017/08/25(金) 16:55:24.12ID:sLUvaIRs aの配列の個数が変わる場合があるので、とりあえず以下のようにしてみたのですがrslt1とrslt2で結果が異なるのは何故ですか?
tobj==[[],[]]はtrueと出ます。
a=[[1,2],3,4,5,[6,7],8,[9,10],[11,12],[13,14]]
tobj=[[]]*2
rslt1 = a.each_with_object([[],[]]) {|x,tary|; tary.each_with_index{|n,i| x.instance_of?(Array) ? tary[i]<<x[i] : tary[i]<<x}}
rslt2 = a.each_with_object(tobj) {|x,tary|; tary.each_with_index{|n,i| x.instance_of?(Array) ? tary[i]<<x[i] : tary[i]<<x}}
tobj==[[],[]]はtrueと出ます。
a=[[1,2],3,4,5,[6,7],8,[9,10],[11,12],[13,14]]
tobj=[[]]*2
rslt1 = a.each_with_object([[],[]]) {|x,tary|; tary.each_with_index{|n,i| x.instance_of?(Array) ? tary[i]<<x[i] : tary[i]<<x}}
rslt2 = a.each_with_object(tobj) {|x,tary|; tary.each_with_index{|n,i| x.instance_of?(Array) ? tary[i]<<x[i] : tary[i]<<x}}
12前スレ996
2017/08/25(金) 17:00:35.79ID:sLUvaIRs すみません。上のは不要なセミコロンが入っていました。(動作は問題ないみたいですが)
a=[[1,2],3,4,5,[6,7],8,[9,10],[11,12],[13,14]]
tobj=[[]]*2
rslt1 = a.each_with_object([[],[]]) {|x,tary| tary.each_with_index{|n,i| x.instance_of?(Array) ? tary[i]<<x[i] : tary[i]<<x}}
rslt2 = a.each_with_object(tobj) {|x,tary| tary.each_with_index{|n,i| x.instance_of?(Array) ? tary[i]<<x[i] : tary[i]<<x}}
p rslt1,rslt2
a=[[1,2],3,4,5,[6,7],8,[9,10],[11,12],[13,14]]
tobj=[[]]*2
rslt1 = a.each_with_object([[],[]]) {|x,tary| tary.each_with_index{|n,i| x.instance_of?(Array) ? tary[i]<<x[i] : tary[i]<<x}}
rslt2 = a.each_with_object(tobj) {|x,tary| tary.each_with_index{|n,i| x.instance_of?(Array) ? tary[i]<<x[i] : tary[i]<<x}}
p rslt1,rslt2
2017/08/25(金) 17:06:01.66ID:W3qddKKH
Rubyの初め方
ルビィの冒険
↓
たのしいRuby、初めてのRuby
↓
パーフェクトRuby
↓
Rubyベストプラクティス
EffectiveRuby
メタプログラミングRuby1版or2版
Rubyによるデザインパターン
↓
リファクタリングRubyエディション
Rubyのしくみ。
ウェブアプリ方面
パーフェクトRubyonRails
RubyonRails5アプリケーション・プログラミング
Docker教科書
JapaScript本格入門第二版
入門Git
GitHub実践入門
SQL 第2版 ゼロからはじめるデータベース操作
達人に学ぶ SQL徹底指南書
SQLアンチパターン
ルビィの冒険
↓
たのしいRuby、初めてのRuby
↓
パーフェクトRuby
↓
Rubyベストプラクティス
EffectiveRuby
メタプログラミングRuby1版or2版
Rubyによるデザインパターン
↓
リファクタリングRubyエディション
Rubyのしくみ。
ウェブアプリ方面
パーフェクトRubyonRails
RubyonRails5アプリケーション・プログラミング
Docker教科書
JapaScript本格入門第二版
入門Git
GitHub実践入門
SQL 第2版 ゼロからはじめるデータベース操作
達人に学ぶ SQL徹底指南書
SQLアンチパターン
14デフォルトの名無しさん
2017/08/25(金) 17:51:40.95ID:HsL9LVKJ リファクタリングRubyエディション
Rubyのしくみ
このふたつは必読
Rubyのしくみ
このふたつは必読
2017/08/25(金) 18:32:17.61ID:w/d6Mddl
>>前スレ989
それ継承でなくて上書きがダメって言ってるだけじゃん
Objectクラス継承しちゃうんだからもうオブジェクト指向言語使うのやめなよ
それ継承でなくて上書きがダメって言ってるだけじゃん
Objectクラス継承しちゃうんだからもうオブジェクト指向言語使うのやめなよ
2017/08/25(金) 18:48:50.81ID:W3qddKKH
>>13
最初からwebアプリ(Rails)を作りたい人は
ルビィの冒険
↓
たのしいRuby、初めてのRuby
↓
パーフェクトRuby
↓
パーフェクトRubyonRails
達人に学ぶ SQL徹底指南書
達人に学ぶ DB設計徹底指南書
SQLアンチパターン
テスト駆動開発をやりたい人は
Railsチュートリアル
はじめて学ぶソフトウェアテスト技法
Everyday Rails - RSpecによるRailsテスト入門
最初からwebアプリ(Rails)を作りたい人は
ルビィの冒険
↓
たのしいRuby、初めてのRuby
↓
パーフェクトRuby
↓
パーフェクトRubyonRails
達人に学ぶ SQL徹底指南書
達人に学ぶ DB設計徹底指南書
SQLアンチパターン
テスト駆動開発をやりたい人は
Railsチュートリアル
はじめて学ぶソフトウェアテスト技法
Everyday Rails - RSpecによるRailsテスト入門
2017/08/25(金) 19:18:38.80ID:3NyVHrhs
>>12
そりゃあんた2次元配列の初期化の基本でしょ。
tobj[0].object_id == tobj[1].object_id なんだから。
tobj = Array.new(2).map([]) とでもしないと。
そりゃあんた2次元配列の初期化の基本でしょ。
tobj[0].object_id == tobj[1].object_id なんだから。
tobj = Array.new(2).map([]) とでもしないと。
2017/08/25(金) 19:25:54.88ID:3NyVHrhs
2017/08/25(金) 19:27:54.09ID:UfR6nGBm
Rubyに多次元配列は存在しない
とかいう例のアレにも通じるアレだな
Array#*は単純にレシーバを引数回繰り返した結果を返す(値は複製しない)
複製しないってことは同じ配列がいくつも繰り返されるだけだ
つまり [[]]*2 と [[],[]] は違う
とかいう例のアレにも通じるアレだな
Array#*は単純にレシーバを引数回繰り返した結果を返す(値は複製しない)
複製しないってことは同じ配列がいくつも繰り返されるだけだ
つまり [[]]*2 と [[],[]] は違う
2017/08/25(金) 20:37:35.28ID:rKeka8MH
a=[[1,2],3,4,5,[6,7],8,[9,10],[11,12],[13,14]]
a.map {|e| [[e].flatten[0], [e].flatten[-1]] }.transpose
=> [[1, 3, 4, 5, 6, 8, 9, 11, 13], [2, 3, 4, 5, 7, 8, 10, 12, 14]]
a.map {|e| [[e].flatten[0], [e].flatten[-1]] }.transpose
=> [[1, 3, 4, 5, 6, 8, 9, 11, 13], [2, 3, 4, 5, 7, 8, 10, 12, 14]]
21デフォルトの名無しさん
2017/08/25(金) 21:01:41.73ID:rKeka8MH [a.map {|(e)| e }, a.map {|(*,e)| e }]
=> [[1, 3, 4, 5, 6, 8, 9, 11, 13], [2, 3, 4, 5, 7, 8, 10, 12, 14]]
=> [[1, 3, 4, 5, 6, 8, 9, 11, 13], [2, 3, 4, 5, 7, 8, 10, 12, 14]]
2017/08/25(金) 21:09:45.04ID:rKeka8MH
[a.map {|(e,*)| e }, a.map {|(*,e)| e }]
=> [[1, 3, 4, 5, 6, 8, 9, 11, 13], [2, 3, 4, 5, 7, 8, 10, 12, 14]]
こっちのほうがきれい >>21は撤回で
=> [[1, 3, 4, 5, 6, 8, 9, 11, 13], [2, 3, 4, 5, 7, 8, 10, 12, 14]]
こっちのほうがきれい >>21は撤回で
2017/08/25(金) 21:31:15.78ID:SZeQgZta
カッコ要らないよ
[a.map {|e,*| e }, a.map {|*,e| e }]
[a.map {|e,*| e }, a.map {|*,e| e }]
2017/08/25(金) 21:58:40.29ID:rKeka8MH
>>23
恐縮です
恐縮です
2017/08/25(金) 22:46:54.39ID:teISJdbp
>>10
メソッドやブロックの引数の受け取り方は多重代入と似た挙動になってるから
入れ子になった配列も展開して変数に受け取ることもできる
def test(a, (b, (c, d)))
……
end
test 1, [2, [3, 4]]
メソッドやブロックの引数の受け取り方は多重代入と似た挙動になってるから
入れ子になった配列も展開して変数に受け取ることもできる
def test(a, (b, (c, d)))
……
end
test 1, [2, [3, 4]]
2017/08/25(金) 22:56:33.15ID:UfR6nGBm
コードゴルフ(もどき)はあまり好ましいことではないように思える
初心者スレであるから特に
splat*を書いてしまったら立ち止まるべきかと
初心者スレであるから特に
splat*を書いてしまったら立ち止まるべきかと
2017/08/26(土) 00:10:52.42ID:azDqTcfP
>>10
Destructuringだね
多重代入は括弧により、ネストした配列の要素を代入することもできます。
https://docs.ruby-lang.org/ja/2.4.0/doc/spec=2foperator.html#multiassign
http://tony.pitluga.com/2011/08/08/destructuring-with-ruby.html
Destructuringだね
多重代入は括弧により、ネストした配列の要素を代入することもできます。
https://docs.ruby-lang.org/ja/2.4.0/doc/spec=2foperator.html#multiassign
http://tony.pitluga.com/2011/08/08/destructuring-with-ruby.html
2017/08/26(土) 00:16:16.83ID:Q9D9720h
うむ
尤もだ
尤もだ
29デフォルトの名無しさん
2017/08/26(土) 00:18:15.51ID:6TCzEPsc >>26
好ましくないが、楽しいので初心者向き。
好ましくないが、楽しいので初心者向き。
30デフォルトの名無しさん
2017/08/26(土) 00:23:16.07ID:6TCzEPsc2017/08/26(土) 00:30:44.39ID:Q9D9720h
>>27
上のリンク先の多重代入の説明間違ってるな
上のリンク先の多重代入の説明間違ってるな
2017/08/26(土) 00:31:33.66ID:GUwpgiyr
カンマで区切る代入はRubyの魔境のひとつなので半端に深入りするのも半端に慣れるのも事故のもとだからやめといたほうがいいかも
33デフォルトの名無しさん
2017/08/26(土) 01:28:41.95ID:8HsFh7FA 多重代入でもハッシュが使えればなーって思うことがたまにある
(x:, y: 1, z: 1.5) = { x: -1 }
(x:, y: 1, z: 1.5) = { x: -1 }
2017/08/26(土) 01:33:58.36ID:N4fvc+FV
式の評価の順番がわけわかめになるのでやめちくり><
2017/08/26(土) 01:44:30.12ID:azDqTcfP
36デフォルトの名無しさん
2017/08/26(土) 07:51:03.88ID:6TCzEPsc >>32
ホントだ。魔境だ。変な仕様だ。
多重代入は括弧により、ネストした配列の要素を代入することもできます。
(foo, bar), baz = [1, 2], 3 # foo = 1; bar = 2; baz = 3
ホントだ。魔境だ。変な仕様だ。
多重代入は括弧により、ネストした配列の要素を代入することもできます。
(foo, bar), baz = [1, 2], 3 # foo = 1; bar = 2; baz = 3
37デフォルトの名無しさん
2017/08/26(土) 07:53:51.24ID:6TCzEPsc そういえばMatz自身が魔境だと言う動画を見たことある。
Matz 多重代入 で検索。
$変数も魔境だ。C言語の関数ポインタの宣言の読み方も魔境だ。
SwiftのStringも魔境だ。
おっと、失礼!
Matz 多重代入 で検索。
$変数も魔境だ。C言語の関数ポインタの宣言の読み方も魔境だ。
SwiftのStringも魔境だ。
おっと、失礼!
38デフォルトの名無しさん
2017/08/26(土) 08:14:32.01ID:6TCzEPsc 多重代入、trickyすぎる。
files = ['Gemfile', 'LICENSE.txt', 'README.md', 'Rakefile', 'bin', 'lib', 'maliq.gemspec', 'pkg', 'spec']
多重代入+括弧で解決します。
(gemspec, *_), files = files.partition { |f| f.match(/¥.gemspec$/) }
gemspec # => "maliq.gemspec"
files # => ["Gemfile", "LICENSE.txt", "README.md", "Rakefile", "bin", "lib", "pkg", "spec"]
files = ['Gemfile', 'LICENSE.txt', 'README.md', 'Rakefile', 'bin', 'lib', 'maliq.gemspec', 'pkg', 'spec']
多重代入+括弧で解決します。
(gemspec, *_), files = files.partition { |f| f.match(/¥.gemspec$/) }
gemspec # => "maliq.gemspec"
files # => ["Gemfile", "LICENSE.txt", "README.md", "Rakefile", "bin", "lib", "pkg", "spec"]
39デフォルトの名無しさん
2017/08/26(土) 13:07:20.00ID:6TCzEPsc2017/08/26(土) 18:34:53.74ID:8HsFh7FA
>>35
それだとその後に
x, y, z = hash[:x], hash[:y], hash[:z]
ってやるか
x, y, z = hash.values_at(:x, :y, :z)
ってやった上に必須キー・不正なキーの確認処理が必要になるじゃない
((x1:, y1:, color1: 0xffffffff), (x2:, y2:, color2: 0x00ffffff)) = obj
みたいに配列中のハッシュも多重代入で済ませられたらなってのが動機
……新しい魔境ができそう
それだとその後に
x, y, z = hash[:x], hash[:y], hash[:z]
ってやるか
x, y, z = hash.values_at(:x, :y, :z)
ってやった上に必須キー・不正なキーの確認処理が必要になるじゃない
((x1:, y1:, color1: 0xffffffff), (x2:, y2:, color2: 0x00ffffff)) = obj
みたいに配列中のハッシュも多重代入で済ませられたらなってのが動機
……新しい魔境ができそう
2017/08/26(土) 20:25:10.89ID:Q9D9720h
長年の謎だったがアスタリスクのことをスプラットとも言うのか
2017/08/26(土) 20:31:00.33ID:0rCQx/Jc
いやアスタリスクはアスタリスクだよ
引数展開をsplatと呼ぶ
それに使われるときの演算子だからsplat
引数展開をsplatと呼ぶ
それに使われるときの演算子だからsplat
2017/08/26(土) 20:48:19.79ID:azDqTcfP
>>40
うん、すまんが何を実現したいか理解できんかった
うん、すまんが何を実現したいか理解できんかった
44デフォルトの名無しさん
2017/08/26(土) 21:22:20.08ID:6TCzEPsc45デフォルトの名無しさん
2017/08/26(土) 21:32:43.71ID:CwpB94hG >>32,36
魔境?、よくわからんけど ML や Haskell といったモダンな関数型言語にある
タプルのパターンマッチングをRubyが部分的に導入した(パクった)だけでは?
たとえば SML(Standard ML) だと、以下は魔境でも魔術でもなんでもなく
単なるパターンマッチングの初歩でしかない
- val ((x, y), z) = ((1, 2), 3); (* 先頭の ‘-‘ はSML/NJのプロンプト *)
val x = 1 : int (* 以下はSML/NJ の応答 *)
val y = 2 : int
val z = 3 : int
少なくとも、これをSMLの世界で魔境やら多重代入と呼ぶ人は存在しない
君たちを見ていると、何やら未開の土人がテレビという文明に接して、
それを魔境の道具などと謎に満ちた深淵な事象に認識してしまう映像を思い出す
魔境?、よくわからんけど ML や Haskell といったモダンな関数型言語にある
タプルのパターンマッチングをRubyが部分的に導入した(パクった)だけでは?
たとえば SML(Standard ML) だと、以下は魔境でも魔術でもなんでもなく
単なるパターンマッチングの初歩でしかない
- val ((x, y), z) = ((1, 2), 3); (* 先頭の ‘-‘ はSML/NJのプロンプト *)
val x = 1 : int (* 以下はSML/NJ の応答 *)
val y = 2 : int
val z = 3 : int
少なくとも、これをSMLの世界で魔境やら多重代入と呼ぶ人は存在しない
君たちを見ていると、何やら未開の土人がテレビという文明に接して、
それを魔境の道具などと謎に満ちた深淵な事象に認識してしまう映像を思い出す
2017/08/26(土) 21:42:19.80ID:0rCQx/Jc
ただの変数リテラル代入を魔境と呼んでる人はいないと思う
2017/08/26(土) 22:03:00.31ID:zlhz7EzI
Prologなんか言語自体が
パターンマッチングで動作してて
全部魔境だからな
パターンマッチングで動作してて
全部魔境だからな
48デフォルトの名無しさん
2017/08/26(土) 22:03:41.96ID:CwpB94hG >>46
モダンな関数型言語のパターンマッチングが単なる変数への代入に限定されると
思い込んでるってことは、君も彼らと同じく未開の土人なんだろな
そんなのネットで調べればすぐにわかることなのに気の毒な
モダンな関数型言語のパターンマッチングが単なる変数への代入に限定されると
思い込んでるってことは、君も彼らと同じく未開の土人なんだろな
そんなのネットで調べればすぐにわかることなのに気の毒な
49デフォルトの名無しさん
2017/08/26(土) 22:26:45.42ID:CwpB94hG >>47
Prolog だと>>45の例は以下のようになる
?- ((X, Y), Z) = ((1, 2), 3). % 先頭の ‘?-‘ は SWI-Prolog のプロンプト
X = 1, % 以下は SWI-Prolog の応答
Y = 2,
Z = 3.
なお ML や Haskell といった関数型言語(および Ruby)のパターンマッチングは
変数と値の代入に限定されるけど、Prolog では変数と変数のマッチも許容され、
それを単一化(ユニフィケーション)と呼び、論理型言語の特質の一つになっている
まあそれを魔境と捉えるのはその人しだいだし、確かに初対面では魔境にしか
見えないのも仕方ないのかもしれない
でも自分にとっては、Lisp の caadr やら cadar やらに嫌気がさしていたから、
なんて(人に)優しい構文なんだと Prolog に入れ込む理由の
大きな要因の一つになっていた
同じく、Ruby のケースも導入されたのは 1.8 の頃だと思うけど、
自分はそれを肯定的に捉えている
Prolog だと>>45の例は以下のようになる
?- ((X, Y), Z) = ((1, 2), 3). % 先頭の ‘?-‘ は SWI-Prolog のプロンプト
X = 1, % 以下は SWI-Prolog の応答
Y = 2,
Z = 3.
なお ML や Haskell といった関数型言語(および Ruby)のパターンマッチングは
変数と値の代入に限定されるけど、Prolog では変数と変数のマッチも許容され、
それを単一化(ユニフィケーション)と呼び、論理型言語の特質の一つになっている
まあそれを魔境と捉えるのはその人しだいだし、確かに初対面では魔境にしか
見えないのも仕方ないのかもしれない
でも自分にとっては、Lisp の caadr やら cadar やらに嫌気がさしていたから、
なんて(人に)優しい構文なんだと Prolog に入れ込む理由の
大きな要因の一つになっていた
同じく、Ruby のケースも導入されたのは 1.8 の頃だと思うけど、
自分はそれを肯定的に捉えている
2017/08/26(土) 22:33:08.15ID:MD6b0JEZ
パターンマッチングを参考に取り入れたはいいけど、つまみ食い的に取り入れたために
きちんとした仕様を策定できなくて魔境になっちゃった
…という感じでは?
きちんとした仕様を策定できなくて魔境になっちゃった
…という感じでは?
2017/08/26(土) 22:33:22.56ID:0rCQx/Jc
いつもの人だから返事しないでおく
2017/08/26(土) 22:33:49.77ID:azDqTcfP
>>45
パターンマッチングと多重代入は別もの
destructuringとかunpackingする部分が共通してるだけ
MLはしらんけどHaskell含めて関数型言語には
基本的に多重代入って考え方がないからそう呼ばないだけだと思うよ
パターンマッチングと多重代入は別もの
destructuringとかunpackingする部分が共通してるだけ
MLはしらんけどHaskell含めて関数型言語には
基本的に多重代入って考え方がないからそう呼ばないだけだと思うよ
2017/08/26(土) 22:35:01.43ID:r2wyjps1
2017/08/26(土) 22:36:22.65ID:r2wyjps1
2017/08/26(土) 22:37:22.86ID:MD6b0JEZ
魔境ってのも、仕様的魔境なのか、実装的魔境なのか、その辺があいまいだよねー
2017/08/26(土) 22:39:13.12ID:gwXj5lMG
57デフォルトの名無しさん
2017/08/26(土) 22:58:24.74ID:CwpB94hG >>53
どうやら >>46 のお仲間みたいですね、しかたないから具体的なコードで
Ruby の場合:
$ irb
irb(main):001:0> [[1,2], [3, 4], [5, 6]].map { |(x, y)| x + y }
=> [3, 7, 11]
SMLの場合:
$ sml
Standard ML of New Jersey v110.79 [built: Sun Oct 4 14:45:06 2015]
- map (fn (x, y) => x + y) [(1, 2), (3, 4), (5, 6)];
val it = [3,7,11] : int list
Ruby のメソッド Enumerable#map の引数であるブロックに相当する
SML の構文 が “fn” <pat> => <expr> になる
>>45 の代入の構文は “val” <pat> = <expr> でしかない
さらに具体的なコードをお求めなら、以下を読んで:
関数型プログラミングにおけるクイックソート・アルゴリズムの実装
http://www.h6.dion.ne.jp/~machan/misc/qsort-in-fp.html
どうやら >>46 のお仲間みたいですね、しかたないから具体的なコードで
Ruby の場合:
$ irb
irb(main):001:0> [[1,2], [3, 4], [5, 6]].map { |(x, y)| x + y }
=> [3, 7, 11]
SMLの場合:
$ sml
Standard ML of New Jersey v110.79 [built: Sun Oct 4 14:45:06 2015]
- map (fn (x, y) => x + y) [(1, 2), (3, 4), (5, 6)];
val it = [3,7,11] : int list
Ruby のメソッド Enumerable#map の引数であるブロックに相当する
SML の構文 が “fn” <pat> => <expr> になる
>>45 の代入の構文は “val” <pat> = <expr> でしかない
さらに具体的なコードをお求めなら、以下を読んで:
関数型プログラミングにおけるクイックソート・アルゴリズムの実装
http://www.h6.dion.ne.jp/~machan/misc/qsort-in-fp.html
58デフォルトの名無しさん
2017/08/26(土) 23:09:14.73ID:CwpB94hG >>56
直感的に言えば、単一化の概念はそれで合ってる(左辺と右辺を同等に扱う)
そして Prolog に代表される論理型言語では、変数とは未知の存在を表し、
単一化により未知を未知のまま扱う(=計算する)ことができる
それは、人間の持つ自然な「等しい」という高度で抽象的な概念により近いはず
これ以上はスレ違いになるから、続きは Prolog スレで
直感的に言えば、単一化の概念はそれで合ってる(左辺と右辺を同等に扱う)
そして Prolog に代表される論理型言語では、変数とは未知の存在を表し、
単一化により未知を未知のまま扱う(=計算する)ことができる
それは、人間の持つ自然な「等しい」という高度で抽象的な概念により近いはず
これ以上はスレ違いになるから、続きは Prolog スレで
2017/08/27(日) 00:07:15.35ID:b/YM8B/u
a,=[1,2,3]
こういうのがキモい。
そうしたいときはあえて(a,)とカッコをつけて書くようにしてる。
こういうのがキモい。
そうしたいときはあえて(a,)とカッコをつけて書くようにしてる。
2017/08/27(日) 01:23:32.91ID:1JS8bjMA
2017/08/27(日) 03:30:57.21ID:dsz1YMQy
Ruby, JS スレには、関数厨が、わんさか湧いてくるw
魔境に、片足を突っ込んでる、言語だからかな?w
魔境に、片足を突っ込んでる、言語だからかな?w
2017/08/27(日) 07:12:35.01ID:OA8i5cQF
「回答」ではなく「自分の知っていること」を長々と書くだけだから同定と回避はしやすいね
2017/08/28(月) 11:35:58.16ID:hSp+oBxP
https://togetter.com/li/1021897
"型は絶対書きたくない" "Ruby3は東京オリンピックまでに
" Rubyの父Matzによる、「楽しいプログラミング体験を届けるために」
#rubykaigi 2016 Keynote
↑これを読んで本当に安心した
少なくともあと10年はRubyで型を書かなくてもよさそうな雰囲気
これで他の言語よりさらに10年遅れることになる
そのころにはすっかり浦島太郎でゴミになってることだろう、良かった
いや、もうすでにゴミなんだろうけど、その認識がもっと広まって
周知徹底していく過程が楽しめる
それでも完全放置プレーされてて単に周りから取り残されて風化していくんなら
それは自然現象なのでありふれてるっつーか、俺自身も含めて皆そうだしアレなんだけど
Rubyの良いところは頑張るんだけど方向性がおかしくてダメ、無意味な努力というのが良い
どのあたりで「折れる」のか、はたまた意地を貫き通して本当に「終わる」のか、見ものだ
これだけ啖呵を切って自ら退路を断ったのだから、ぜひとも華々しく散ってほしい
"型は絶対書きたくない" "Ruby3は東京オリンピックまでに
" Rubyの父Matzによる、「楽しいプログラミング体験を届けるために」
#rubykaigi 2016 Keynote
↑これを読んで本当に安心した
少なくともあと10年はRubyで型を書かなくてもよさそうな雰囲気
これで他の言語よりさらに10年遅れることになる
そのころにはすっかり浦島太郎でゴミになってることだろう、良かった
いや、もうすでにゴミなんだろうけど、その認識がもっと広まって
周知徹底していく過程が楽しめる
それでも完全放置プレーされてて単に周りから取り残されて風化していくんなら
それは自然現象なのでありふれてるっつーか、俺自身も含めて皆そうだしアレなんだけど
Rubyの良いところは頑張るんだけど方向性がおかしくてダメ、無意味な努力というのが良い
どのあたりで「折れる」のか、はたまた意地を貫き通して本当に「終わる」のか、見ものだ
これだけ啖呵を切って自ら退路を断ったのだから、ぜひとも華々しく散ってほしい
2017/08/28(月) 12:11:24.54ID:hSp+oBxP
このようなことが本当に可能なのかどうなのか
メソッドが動的に生える場合は対応できないのは仕方が無いとしても
代入という代入を過去も含めてすべて精査しなければ、その変数に
何が入りえるかなど分かりようもない
プログラムが分岐していたら可能性が二つに分岐する
もっと端的に、配列のようなコンテナで
静的型言語なら同じインターフェースを持ったオブジェクトしか入らないわけだが
Rubyのような言語の配列はごった煮状態になりえるわけで・・・
さらに言えば変数への代入にしたって、同じ変数を、使いまわすかもしれない
変数へアクセスするときに適切に型スイッチしているならそれは合法なコードだが
検査ツールはそのことを検出して合法と決断を下さなければならない
型推論もコードを追わないといけないし、適切に使われているかもコードを追わないといけない
両方が泥団子であり、全くの不毛である
型という仲介を通して両者をつなぐとスッキリすることは既に十分実験されていて
分かり切ってるのにあえてこのような泥団子を好む人はいない
これから先このような無意味で壮大なことに労力を割くことで
Rubyのその他の面の進歩はどんどん遅れて、周りから取り残されていくだろう
10年単位で
是非そうなってほしい
メソッドが動的に生える場合は対応できないのは仕方が無いとしても
代入という代入を過去も含めてすべて精査しなければ、その変数に
何が入りえるかなど分かりようもない
プログラムが分岐していたら可能性が二つに分岐する
もっと端的に、配列のようなコンテナで
静的型言語なら同じインターフェースを持ったオブジェクトしか入らないわけだが
Rubyのような言語の配列はごった煮状態になりえるわけで・・・
さらに言えば変数への代入にしたって、同じ変数を、使いまわすかもしれない
変数へアクセスするときに適切に型スイッチしているならそれは合法なコードだが
検査ツールはそのことを検出して合法と決断を下さなければならない
型推論もコードを追わないといけないし、適切に使われているかもコードを追わないといけない
両方が泥団子であり、全くの不毛である
型という仲介を通して両者をつなぐとスッキリすることは既に十分実験されていて
分かり切ってるのにあえてこのような泥団子を好む人はいない
これから先このような無意味で壮大なことに労力を割くことで
Rubyのその他の面の進歩はどんどん遅れて、周りから取り残されていくだろう
10年単位で
是非そうなってほしい
2017/08/28(月) 12:31:29.95ID:hSp+oBxP
動的型が当たり前の時代が有ったり、静的型が当たり前の時代が有ったり
両社は振り子のように揺れ動くものであるから
今は静的型が人気だが、いづれ動的型の時代が来るかもしれない
今、安易に静的型を取り入れると、そのときになって対応できなくなるから
Rubyには静的型を入れない
↑という言い分だが、そもそもが全くの嘘、でっち上げである
思い出してみれば分かるが、動的型の時代など、「無かった」
C言語が登場して以来、ずっと静的型の時代だっただろう
時系列で言えば、C → C++ → Java → C# という感じの登場順かな
これらの言語は今でも人気がある、というか、先頭集団
ずっと継続して人気者のグループ
これらの言語にRubyが勝ってた時代があったか?
だから振り子のような現象というのが、もう、真っ赤なウソ
動的型言語の時代などなかったし、これから動的型言語の時代が来ることもない
とにかくあの人は隙あらば嘘をついて人をだまそうとする
例のカルト宗教の勧誘で得たテクニックなんだろうか、知らんがな
もう一つの嘘は、動的型言語でもJavascriptのように速度が速い言語もある
だから速度を上げるために静的型を入れる必要はない、っていうやつ
まぁ嘘っつーかアレだが、Javascriptは物凄く多大な労力かつ非常に高度なことをやって
あの速度を得ているわけだが、そんな実装はRubyでは無理って自分で分かってる癖に
しれっとこういうことを言う
だったら今すぐV8エンジン並みの実装用意しろよ、出来るんだろ?
両社は振り子のように揺れ動くものであるから
今は静的型が人気だが、いづれ動的型の時代が来るかもしれない
今、安易に静的型を取り入れると、そのときになって対応できなくなるから
Rubyには静的型を入れない
↑という言い分だが、そもそもが全くの嘘、でっち上げである
思い出してみれば分かるが、動的型の時代など、「無かった」
C言語が登場して以来、ずっと静的型の時代だっただろう
時系列で言えば、C → C++ → Java → C# という感じの登場順かな
これらの言語は今でも人気がある、というか、先頭集団
ずっと継続して人気者のグループ
これらの言語にRubyが勝ってた時代があったか?
だから振り子のような現象というのが、もう、真っ赤なウソ
動的型言語の時代などなかったし、これから動的型言語の時代が来ることもない
とにかくあの人は隙あらば嘘をついて人をだまそうとする
例のカルト宗教の勧誘で得たテクニックなんだろうか、知らんがな
もう一つの嘘は、動的型言語でもJavascriptのように速度が速い言語もある
だから速度を上げるために静的型を入れる必要はない、っていうやつ
まぁ嘘っつーかアレだが、Javascriptは物凄く多大な労力かつ非常に高度なことをやって
あの速度を得ているわけだが、そんな実装はRubyでは無理って自分で分かってる癖に
しれっとこういうことを言う
だったら今すぐV8エンジン並みの実装用意しろよ、出来るんだろ?
2017/08/28(月) 15:02:32.66ID:eUKA+ayD
誰も読んでないのによくもまあ長々と
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 高市首相の台湾有事答弁「問題ない」50% 「問題があったと思う」25%を大きく上回る 毎日新聞世論調査 ★2 [尺アジ★]
- 高市内閣の支持率72%、高い水準維持…読売世論調査 [どどん★]
- 【発信国情報】X、プロフィール上に「VPN使用の有無」も表示か… [BFU★]
- 高市首相の台湾有事答弁「問題ない」50% 「問題があったと思う」25%を大きく上回る 毎日新聞世論調査 ★3 [尺アジ★]
- 【外交】オーストラリア市民党全国委員長「高市首相の発言は極めて破壊的」 [1ゲットロボ★]
- 香港、日本側と交流停止 首相発言受け中国に追従 [蚤の市★]
- @@@令和七年大相撲九州場所 vol.13@@@
- 競輪実況★1608
- 巨専】ジャイアンツファンフェスタ2025
- とらせん 2
- 2025 SUPER FORMULA Lap21 【歩夢、伝説へ】
- こいせん 全レス転載禁止 SHAKARIKI
- 【日本一決定戦】千葉県民ちょっと来いkskすっぞ【王者は驕らず勝ち進む】
- 【日本一決定戦】神奈川県民ちょっと来いkskすっぞ【鳩サブレー】
- 【日本一決定戦】大阪府民ちょっと来いkskすっぞ【ミャクミャク様が大屋根リングでお休みやでええ】
- 高市首相、G20で中国念頭に「レアアースを特定国に頼らずアフリカから輸入しましょう!」と提唱し中国を挑発wwwwwwwwwwww [271912485]
- 若者、徴兵されたがっていた。対中強硬姿勢評価が圧倒的 [237216734]
- おさかなさんあつまれえ
