カンマだけ渡したなら空文字入り長さ2の配列で返したいから、この場合長さ1で返すかな。 めっちゃ悩んだけども。 twitter.com/wonderful_pand…
2021-06-21 23:51:57投票とってみるか。 「与えられた文字列をカンマでsplitした結果を配列で返す」というメソッドがあるとして、空文字列を指定した結果は
2021-06-21 14:46:03最近触ってるのはもっぱらPHPだから普通に考えたら先頭要素に空文字入った配列返るんじゃね?と思ったけど そうでもないパターンもあんのね まぁこの手の関数使う時は VBAにしてもC#にしても 毎回どんな挙動だっけなってド忘れしてググッて使う事が多いけど twitter.com/wonderful_pand…
2021-06-21 23:56:142500超えてるのに真っ二つたのワロタ perl脳のワイ、[] が返ってくるなと思って0に投票したが、一貫性のある動作を求めるなら [‘’] になるのが自然だから1が多そう思ったので結果にびびる twitter.com/wonderful_pand…
2021-06-22 00:04:05完全に半々なのすごい どっちの気持ちもわかる 普通に考えて1だろと最初思ってたけど空白区切りの場合は連続する空白の間の空文字列なんて取り出してほしくないからその理屈で行くと0っぽいんだよな… "".split()は0 "".split(",")は1 であって欲しい twitter.com/wonderful_pand…
2021-06-22 00:09:25一貫性で解釈しがちなプログラマ的な思考だと 1 になるのが自然 (カンマの数に 1 を足した数の要素が存在するのだからカンマが 0 個なら要素数は 1 個) だけれど、自然言語的な解釈だと要素数が 0 個になるのも全く理不尽というわけでもないと思えてしまう。 人間のバグ。 twitter.com/wonderful_pand…
2021-06-22 00:11:21この話 昔言っていた 1以上の長さを返すということを型レベル ( (a, List a) ) で表現するのがわかりやすいので, Definyの標準ライブラリはこうしたい twitter.com/naru_mincho/st… twitter.com/wonderful_pand…
2021-06-22 05:02:52JavaScriptとか多くの言語で "".split(",")が[""]になりこの動作を忘れやすい。 だから、Definyでは ・出力の長さが1つ以上 ・セパレーターの長さは1以上 ・Listでもできる を表現するために型を List.split : (a, List a) → List a → (List a, List (List a))にしよう
2019-05-14 21:11:56@mattn_jp @wonderful_panda Pythonはセパレーターで挙動変わるかもしれません pic.twitter.com/rqKZ7S1pfB
2021-06-22 07:27:24@hiromichinomata @wonderful_panda Ruby はも limit=-1 で(僕の)期待通りになるぽいです。
2021-06-22 10:28:17@mattn_jp @hiromichinomata えーー(limitは最大分割数の制限にのみ使うべきだと思うので末尾の空白を取り除くかどうかの指定も兼ねるのは長さ0の配列を返すことよりも許しがたい)
2021-06-22 10:43:19@mattn_jp @hiromichinomata というかrubyのsplit(limit指定なし)って「末尾の空文字列を取り除く」だから、空文字列に限らず ",,,".split(",") とかも [] になるんですね。 ちょっと勘違いしてました。
2021-06-22 10:51:49改訂版 空文字列をsplitした結果→ 空リスト派: Perl, Ruby, R, D, Go, Tcl, Julia 空文字列のリスト派: JavaScript, Python, Java, Kotlin, C#, Rust, Crystal
2021-06-22 12:50:05split(xs) + split(ys) = split(xs + "," + ys)が成り立つようにするにはsplit("") = [""]であるべきだが、どうやら[]が優勢らしい twitter.com/wonderful_pand…
2021-06-22 15:29:02引用RTでは圧倒的に長さ1派が優勢、かつ「長さ0はありえない」みたいな調子の言及も多いので、長さ1派の方がプログラマー経験が長くて自分の意見に自信を持っているみたいな傾向はありそう
2021-06-22 15:32:27おもしろい。PerlやRubyは0だが仕様として特別扱いの記述がある。1になるものは、区切りが対象文字列に存在しない場合は分割できないのでそのまま、という一般的解釈に則っているんだと思う。 twitter.com/wonderful_pand…
2021-06-22 16:02:18"".split(",") の挙動の件、UNIXやシェルでは「空白区切りの文字列」で「文字列の配列」を表現することが(今でも)広く行われていて、この世界観では空文字列は空配列に自然に相当するためではないか、とRubyの大先輩方に教えてもらって納得した pic.twitter.com/TLmHklCT78
2021-06-24 15:02:54RubyのsplitはPerl→awk→shへと遡るもので、任意個の連続したホワイトスペースを区切りとする分かち書き文字列から単語を切り出す機能として生まれ、区切り文字の指定はオプショナル。Cのstrtok(3)も空文字列および区切り文字のみの文字列はトークンなしと見なすので、Unixの慣習ですね。 twitter.com/mametter/statu…
2021-06-24 15:23:03