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

Obj:pickを追加 #881

Merged
merged 3 commits into from
Dec 25, 2024
Merged

Obj:pickを追加 #881

merged 3 commits into from
Dec 25, 2024

Conversation

FineArchs
Copy link
Member

@FineArchs FineArchs commented Dec 18, 2024

関数Obj:extractとObj:extract_with_defaultObj:pickを追加します。

doc

@obj:pick<T>(o: obj<T>, keys: arr<str>): obj<T>

オブジェクトoのプロパティのうち、キー名がkeysに含まれるもののみを抽出します。
keysにあってoにないキーはNULLになります。

@codecov-commenter
Copy link

codecov-commenter commented Dec 18, 2024

⚠️ Please install the 'codecov app svg image' to ensure uploads and comments are reliably processed by Codecov.

Codecov Report

All modified and coverable lines are covered by tests ✅

❗ Your organization needs to install the Codecov GitHub app to enable full functionality.

Files with missing lines Coverage Δ
src/interpreter/lib/std.ts 77.19% <100.00%> (-2.05%) ⬇️

... and 30 files with indirect coverage changes

@uzmoi
Copy link
Member

uzmoi commented Dec 19, 2024

言語のstdに入れるほどの汎用性を感じないというかユースケースがわからないのですが、どんな使い方を想定していますか?
デフォルトはObj:merge(defaults, o)とかでも代用できそうですが

@FineArchs
Copy link
Member Author

言語のstdに入れるほどの汎用性を感じないというかユースケースがわからないのですが、どんな使い方を想定していますか? デフォルトはObj:merge(defaults, o)とかでも代用できそうですが

余計なキーを削除できるという点から、主な想定用途はモジュール化におけるアクセス制限です。

@uzmoi
Copy link
Member

uzmoi commented Dec 20, 2024

モジュール化のために既にあるオブジェクトのキーを絞るシチュエーションがわからないです

@takejohn
Copy link
Contributor

Obj:from_kvsのような関数を追加するくらいだと汎用できそう

// Obj:extract (keysにあってoにないキーはnull)
Obj:from_kvs(keys.map(@(key) { [key, o[key]] }))

// keysとoの両方にあるキーのみ抽出
Obj:from_kvs(Obj:kvs(o).filter(@([key]) { keys.incl(key) }))

// Obj:extract_with_default
Obj:merge(defaults, Obj:from_kvs(Obj:kvs(o).filter(@([key]) { Obj:has(defaults, key) })))

@FineArchs
Copy link
Member Author

モジュール化のために既にあるオブジェクトのキーを絞るシチュエーションがわからないです

例えば読み書き両用のモジュールからget系メソッドのみを抽出する場合が考えられます。

Obj:from_kvsのような関数を追加するくらいだと汎用できそう

Obj:from_kvsも欲しいですが、毎回Obj:kvs->何らかの処理->Obj:from_kvsをしているとネストで非常に見づらくなるんですよね

@uzmoi
Copy link
Member

uzmoi commented Dec 21, 2024

extractは入れてもいいかもと思いました
extractの関数名はTypeScriptのユーティリティ型と同じくpickのほうが個人的にはしっくり来ます

extract_with_defaultはstdに入れるにしては、ユーザーが簡単に定義できるし汎用性が欠けてる感じがします
後方互換性の観点から一度入れたら消すのは難しいので、今後の言語の方向性に左右されるような機能追加には慎重になりたいのです

@FineArchs
Copy link
Member Author

extractpickに変更、extract_with_defaultを削除しました。

@takejohn takejohn changed the title Obj:extractとObj:extract_with_defaultを追加 Obj:pickを追加 Dec 22, 2024
unreleased/obj-extract Outdated Show resolved Hide resolved
Co-authored-by: Take-John <takejohn@takejohn.jp>
@FineArchs FineArchs merged commit cb07b15 into aiscript-dev:master Dec 25, 2024
4 checks passed
@FineArchs FineArchs deleted the obj-extract branch December 25, 2024 09:56
@takejohn takejohn mentioned this pull request Jan 21, 2025
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.

4 participants