Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add String#length, size #540

Merged
merged 1 commit into from Sep 7, 2017
Merged

Add String#length, size #540

merged 1 commit into from Sep 7, 2017

Conversation

@okkez okkez merged commit 6b7907c into rurema:master Sep 7, 2017
@okkez
Copy link
Member

okkez commented Sep 7, 2017

Thanks!

@tbpgr tbpgr deleted the add_string_length branch September 7, 2017 15:18
@scivola
Copy link
Contributor

scivola commented Sep 12, 2017

「文字数」って概念が自明ではないので,「コードポイントで数える」というようなことを書くといいかもしれません。

具体的には以下のようなケースが問題となります。これらのうち,少なくとも最初のもの(サロゲートペア)はコード例も示すと良いのではないかと思います。

◎UTF-16 でサロゲートペアによって表される文字でも,あくまで 1 文字と数える

puts "\u{29E3D}".encode("UTF-16LE").length #=> 1

JavaScript は 2 文字と数えるらしいですね。

◎合成用ダイアクリティカルマークはそれだけで 1 文字と数える

s = "\u0254\u0301"
puts s #=> ɔ́
puts s.length #=> 2

◎異体字セレクターはそれだけで 1 文字と数える

s = "\u845B\u{E0100}"
puts s #=> 葛󠄀
puts s.length #=> 2

◎Windows の改行コードは 2 文字と数える

puts "\r\n".length #=> 2

◎インド系文字の結合文字

やはりそれを表記するコードポイントの数で。

s = "\u0915\u094D\u0937"
puts s #=> क्ष
puts s.length #=> 3

@tbpgr
Copy link
Contributor Author

tbpgr commented Sep 12, 2017

@scivola すでにマージされてクローズされてるので、別のプルリクとして提案するといいんじゃないかな、と思います。

@scivola
Copy link
Contributor

scivola commented Sep 12, 2017

一般的に,クローズされたところにこういうこと書かないんですね。わかりました。

@tbpgr
Copy link
Contributor Author

tbpgr commented Sep 12, 2017

OSS活動量がとても多いわけではないのでどういうのが一般的なのかはあんまり把握してないですね。
ただ、クローズしてると話題の継続性としても見逃されやすそうなので別途プルリクしたほうが何かと利点があるのかな思って提案しました 😄

@sho-h
Copy link
Member

sho-h commented Sep 13, 2017

僕はクローズした後に(あまりよくない気がしますが)補足等追記したり、「この修正も必要だった」みたいな事をcloseしたまま書く場合がありますが、上記は議論が必要そうなのでreopenするか別Issueにするのがいいように思いました。また、サンプルコード部分だけでなく一緒に「文字数」の部分の説明も更新する可能性もあるようにも感じましたので、後者の別Issueにするのがいいのかもしれません。

@scivola
Copy link
Contributor

scivola commented Sep 16, 2017

何をもって 1 文字とするか,について issue を上げました。
#574

書いてるうちに,String#length だけでなく多くのメソッドに関わる問題であると気付きました。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants