Officially implement a clone macro
Nobody has claimed this yet.
- Dominant language
- Markdown
- Stars
- 6.6k
- Forks
- 1.7k
- Avg merge
- 16h 14m
- Merged PRs (30d)
- 1
Description
At the bottom of http://gtk-rs.org/tuto/closures, they gave us this
macro_rules! clone {
(@param _) => ( _ );
(@param $x:ident) => ( $x );
($($n:ident),+ => move || $body:expr) => (
{
$( let $n = $n.clone(); )+
move || $body
}
);
($($n:ident),+ => move |$($p:tt),+| $body:expr) => (
{
$( let $n = $n.clone(); )+
move |$(clone!(@param $p),)+| $body
}
);
}
which would allow more seamless cloning.
let windows_clone = windows.clone();
button.connect_clicked(move |_| {
would become
button.connect_clicked(clone!(windows => move |_| {
Why is this good?
- Less messy
- No reason to think of an unique variable name every time
And I just thought having some official solution to this, whether it's as simple as copying the macro code, or if it's making some new syntax, it would be awesome to have :)
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reviewing the clone macro example in the gtk-rs closures tutorial linked by the issue. Determine whether an official solution should copy that macro or introduce new syntax; done requires a decided design and corresponding RFC implementation scope, but no repository file or test is named.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- compilers
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100