Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
ef70b766
R
Rust
项目概览
int
/
Rust
大约 1 年 前同步成功
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
Rust
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
ef70b766
编写于
11月 26, 2013
作者:
B
bors
浏览文件
操作
浏览文件
下载
差异文件
auto merge of #10668 : vky/rust/closure-doc-update, r=alexcrichton
上级
4fe12965
9c6bba91
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
56 addition
and
56 deletion
+56
-56
doc/po/ja/rust.md.po
doc/po/ja/rust.md.po
+8
-8
doc/po/ja/tutorial.md.po
doc/po/ja/tutorial.md.po
+14
-14
doc/po/rust.md.pot
doc/po/rust.md.pot
+8
-8
doc/po/tutorial.md.pot
doc/po/tutorial.md.pot
+9
-9
doc/rust.md
doc/rust.md
+8
-8
doc/tutorial.md
doc/tutorial.md
+9
-9
未找到文件。
doc/po/ja/rust.md.po
浏览文件 @
ef70b766
...
...
@@ -1817,10 +1817,10 @@ msgstr ""
#, no-wrap
msgid ""
"~~~~ {.xfail-test}\n"
"fn iter<T>(seq: &[T], f:
&fn(T)
) {\n"
"fn iter<T>(seq: &[T], f:
|T|
) {\n"
" for elt in seq.iter() { f(elt); }\n"
"}\n"
"fn map<T, U>(seq: &[T], f:
&fn(T)
-> U) -> ~[U] {\n"
"fn map<T, U>(seq: &[T], f:
|T|
-> U) -> ~[U] {\n"
" let mut acc = ~[];\n"
" for elt in seq.iter() { acc.push(f(elt)); }\n"
" acc\n"
...
...
@@ -2404,7 +2404,7 @@ msgid ""
"trait Seq<T> {\n"
" fn len(&self) -> uint;\n"
" fn elt_at(&self, n: uint) -> T;\n"
" fn iter(&self,
&fn(T)
);\n"
" fn iter(&self,
|T|
);\n"
"}\n"
"~~~~\n"
msgstr ""
...
...
@@ -4243,7 +4243,7 @@ msgid ""
"[function definitions](#functions) do not. The exact type of capture "
"depends on the [function type](#function-types) inferred for the lambda "
"expression. In the simplest and least-expensive form (analogous to a "
"```
&fn()
{ }``` expression), the lambda expression captures its environment "
"```
||
{ }``` expression), the lambda expression captures its environment "
"by reference, effectively borrowing pointers to all outer variables "
"mentioned inside the function. Alternately, the compiler may infer that a "
"lambda expression should copy or move values (depending on their type.) "
...
...
@@ -4262,7 +4262,7 @@ msgstr ""
#, no-wrap
msgid ""
"~~~~\n"
"fn ten_times(f:
&fn(int)
) {\n"
"fn ten_times(f:
|int|
) {\n"
" let mut i = 0;\n"
" while i < 10 {\n"
" f(i);\n"
...
...
@@ -4455,7 +4455,7 @@ msgstr ""
#. type: Plain text
#: doc/rust.md:2339
msgid "~~~~ # fn f(f:
&fn(int)
) { } # fn g(i: int) { }"
msgid "~~~~ # fn f(f:
|int|
) { } # fn g(i: int) { }"
msgstr ""
#. type: Plain text
...
...
@@ -4481,7 +4481,7 @@ msgstr ""
#. type: Plain text
#: doc/rust.md:2352
msgid "~~~~ # fn k(x:int, f:
&fn(int)
) { } # fn l(i: int) { }"
msgid "~~~~ # fn k(x:int, f:
|int|
) { } # fn l(i: int) { }"
msgstr ""
#. type: Plain text
...
...
@@ -5483,7 +5483,7 @@ msgstr ""
#, no-wrap
msgid ""
"~~~~~~~\n"
"fn map<A: Clone, B: Clone>(f:
&fn(A)
-> B, xs: &[A]) -> ~[B] {\n"
"fn map<A: Clone, B: Clone>(f:
|A|
-> B, xs: &[A]) -> ~[B] {\n"
" if xs.len() == 0 {\n"
" return ~[];\n"
" }\n"
...
...
doc/po/ja/tutorial.md.po
浏览文件 @
ef70b766
...
...
@@ -3340,10 +3340,10 @@ msgstr ""
#. type: Plain text
#: doc/tutorial.md:1434
msgid "~~~~ fn call_closure_with_ten(b:
&fn(int)
) { b(10); }"
msgid "~~~~ fn call_closure_with_ten(b:
|int|
) { b(10); }"
msgstr ""
"~~~~\n"
"fn call_closure_with_ten(b:
&fn(int)
) { b(10); }"
"fn call_closure_with_ten(b:
|int|
) { b(10); }"
#. type: Plain text
#: doc/tutorial.md:1437
...
...
@@ -3400,11 +3400,11 @@ msgstr ""
#: doc/tutorial.md:1459
msgid ""
"There are several forms of closure, each with its own role. The most common, "
"called a _stack closure_, has type `
&fn
` and can directly access local "
"called a _stack closure_, has type `
||
` and can directly access local "
"variables in the enclosing scope."
msgstr ""
"クロージャにはいくつかの形態があり、それぞれに独自の役割があります。最も一般"
"的なのはスタッククロージャと呼ばれるもので、 `
&fn
` という型を持ち、外側のロー"
"的なのはスタッククロージャと呼ばれるもので、 `
||
` という型を持ち、外側のロー"
"カル変数に直接アクセスすることができます。"
#. type: Plain text
...
...
@@ -3531,27 +3531,27 @@ msgstr "## クロージャの互換性"
msgid ""
"Rust closures have a convenient subtyping property: you can pass any kind of "
"closure (as long as the arguments and return types match) to functions that "
"expect a `
&fn()
`. Thus, when writing a higher-order function that only calls "
"expect a `
||
`. Thus, when writing a higher-order function that only calls "
"its function argument, and does nothing else with it, you should almost "
"always declare the type of that argument as `
&fn()
`. That way, callers may "
"always declare the type of that argument as `
||
`. That way, callers may "
"pass any kind of closure."
msgstr ""
"Rust のクロージャは型の派生 (subtyping) という便利な性質を持っています。この"
"性質により、`
&fn()
` 型を期待する関数には (引数と戻り値の型が一致する限り) 任"
"性質により、`
||
` 型を期待する関数には (引数と戻り値の型が一致する限り) 任"
"意の種類のクロージャを渡すことができます。したがって、引数で渡された関数につ"
"いては呼び出すだけで他に何もしない高階関数を書くときには、ほぼすべてのケース"
"で引数の型を `
&fn
` と宣言するべきです。そうすることで、呼び出し元は任意の種類"
"で引数の型を `
||
` と宣言するべきです。そうすることで、呼び出し元は任意の種類"
"のクロージャを渡すことができるよになります。"
#. type: Plain text
#: doc/tutorial.md:1527
msgid ""
"~~~~ fn call_twice(f:
&fn()
) { f(); f(); } let closure = || { \"I'm a "
"~~~~ fn call_twice(f:
||
) { f(); f(); } let closure = || { \"I'm a "
"closure, and it doesn't matter what type I am\"; }; fn function() { \"I'm a "
"normal function\"; } call_twice(closure); call_twice(function); ~~~~"
msgstr ""
"~~~~\n"
"fn call_twice(f:
&fn()
) { f(); f(); }\n"
"fn call_twice(f:
||
) { f(); f(); }\n"
"let closure = || { \"I'm a closure, and it doesn't matter what type I am"
"\"; };\n"
"fn function() { \"I'm a normal function\"; }\n"
...
...
@@ -3598,7 +3598,7 @@ msgstr ""
#, no-wrap
msgid ""
"~~~~\n"
"fn each(v: &[int], op:
&fn(v: &int)
) {\n"
"fn each(v: &[int], op:
|v: &int|
) {\n"
" let mut n = 0;\n"
" while n < v.len() {\n"
" op(&v[n]);\n"
...
...
@@ -3622,7 +3622,7 @@ msgstr ""
#, no-wrap
msgid ""
"~~~~\n"
"# fn each(v: &[int], op:
&fn(v: &int)
) { }\n"
"# fn each(v: &[int], op:
|v: &int|
) { }\n"
"# fn do_some_work(i: &int) { }\n"
"each([1, 2, 3], |n| {\n"
" do_some_work(n);\n"
...
...
@@ -3644,7 +3644,7 @@ msgstr ""
#, no-wrap
msgid ""
"~~~~\n"
"# fn each(v: &[int], op:
&fn(v: &int)
) { }\n"
"# fn each(v: &[int], op:
|v: &int|
) { }\n"
"# fn do_some_work(i: &int) { }\n"
"do each([1, 2, 3]) |n| {\n"
" do_some_work(n);\n"
...
...
@@ -4011,7 +4011,7 @@ msgstr ""
#, no-wrap
msgid ""
"~~~~\n"
"fn map<T, U>(vector: &[T], function:
&fn(v: &T)
-> U) -> ~[U] {\n"
"fn map<T, U>(vector: &[T], function:
|v: &T|
-> U) -> ~[U] {\n"
" let mut accumulator = ~[];\n"
" for element in vector.iter() {\n"
" accumulator.push(function(element));\n"
...
...
doc/po/rust.md.pot
浏览文件 @
ef70b766
...
...
@@ -1817,10 +1817,10 @@ msgstr ""
#, no-wrap
msgid ""
"~~~~ {.xfail-test}\n"
"fn iter<T>(seq: &[T], f:
&fn(T)
) {\n"
"fn iter<T>(seq: &[T], f:
|T|
) {\n"
" for elt in seq.iter() { f(elt); }\n"
"}\n"
"fn map<T, U>(seq: &[T], f:
&fn(T)
-> U) -> ~[U] {\n"
"fn map<T, U>(seq: &[T], f:
|T|
-> U) -> ~[U] {\n"
" let mut acc = ~[];\n"
" for elt in seq.iter() { acc.push(f(elt)); }\n"
" acc\n"
...
...
@@ -2404,7 +2404,7 @@ msgid ""
"trait Seq<T> {\n"
" fn len(&self) -> uint;\n"
" fn elt_at(&self, n: uint) -> T;\n"
" fn iter(&self,
&fn(T)
);\n"
" fn iter(&self,
|T|
);\n"
"}\n"
"~~~~\n"
msgstr ""
...
...
@@ -4230,7 +4230,7 @@ msgid ""
"[function definitions](#functions) do not. The exact type of capture "
"depends on the [function type](#function-types) inferred for the lambda "
"expression. In the simplest and least-expensive form (analogous to a "
"```
&fn()
{ }``` expression), the lambda expression captures its environment "
"```
||
{ }``` expression), the lambda expression captures its environment "
"by reference, effectively borrowing pointers to all outer variables "
"mentioned inside the function. Alternately, the compiler may infer that a "
"lambda expression should copy or move values (depending on their type.) "
...
...
@@ -4249,7 +4249,7 @@ msgstr ""
#, no-wrap
msgid ""
"~~~~\n"
"fn ten_times(f:
&fn(int)
) {\n"
"fn ten_times(f:
|int|
) {\n"
" let mut i = 0;\n"
" while i < 10 {\n"
" f(i);\n"
...
...
@@ -4442,7 +4442,7 @@ msgstr ""
#. type: Plain text
#: doc/rust.md:2339
msgid "~~~~ # fn f(f:
&fn(int)
) { } # fn g(i: int) { }"
msgid "~~~~ # fn f(f:
|int|
) { } # fn g(i: int) { }"
msgstr ""
#. type: Plain text
...
...
@@ -4468,7 +4468,7 @@ msgstr ""
#. type: Plain text
#: doc/rust.md:2352
msgid "~~~~ # fn k(x:int, f:
&fn(int)
) { } # fn l(i: int) { }"
msgid "~~~~ # fn k(x:int, f:
|int|
) { } # fn l(i: int) { }"
msgstr ""
#. type: Plain text
...
...
@@ -5470,7 +5470,7 @@ msgstr ""
#, no-wrap
msgid ""
"~~~~~~~\n"
"fn map<A: Clone, B: Clone>(f:
&fn(A)
-> B, xs: &[A]) -> ~[B] {\n"
"fn map<A: Clone, B: Clone>(f:
|A|
-> B, xs: &[A]) -> ~[B] {\n"
" if xs.len() == 0 {\n"
" return ~[];\n"
" }\n"
...
...
doc/po/tutorial.md.pot
浏览文件 @
ef70b766
...
...
@@ -2558,7 +2558,7 @@ msgstr ""
#. type: Plain text
#: doc/tutorial.md:1434
msgid "~~~~ fn call_closure_with_ten(b:
&fn(int)
) { b(10); }"
msgid "~~~~ fn call_closure_with_ten(b:
|int|
) { b(10); }"
msgstr ""
#. type: Plain text
...
...
@@ -2601,7 +2601,7 @@ msgstr ""
#: doc/tutorial.md:1459
msgid ""
"There are several forms of closure, each with its own role. The most common, "
"called a _stack closure_, has type `
&fn
` and can directly access local "
"called a _stack closure_, has type `
||
` and can directly access local "
"variables in the enclosing scope."
msgstr ""
...
...
@@ -2700,16 +2700,16 @@ msgstr ""
msgid ""
"Rust closures have a convenient subtyping property: you can pass any kind of "
"closure (as long as the arguments and return types match) to functions that "
"expect a `
&fn()
`. Thus, when writing a higher-order function that only calls "
"expect a `
||
`. Thus, when writing a higher-order function that only calls "
"its function argument, and does nothing else with it, you should almost "
"always declare the type of that argument as `
&fn()
`. That way, callers may "
"always declare the type of that argument as `
||
`. That way, callers may "
"pass any kind of closure."
msgstr ""
#. type: Plain text
#: doc/tutorial.md:1527
msgid ""
"~~~~ fn call_twice(f:
&fn()
) { f(); f(); } let closure = || { \"I'm a "
"~~~~ fn call_twice(f:
||
) { f(); f(); } let closure = || { \"I'm a "
"closure, and it doesn't matter what type I am\"; }; fn function() { \"I'm a "
"normal function\"; } call_twice(closure); call_twice(function); ~~~~"
msgstr ""
...
...
@@ -2746,7 +2746,7 @@ msgstr ""
#, no-wrap
msgid ""
"~~~~\n"
"fn each(v: &[int], op:
&fn(v: &int)
) {\n"
"fn each(v: &[int], op:
|v: &int|
) {\n"
" let mut n = 0;\n"
" while n < v.len() {\n"
" op(&v[n]);\n"
...
...
@@ -2768,7 +2768,7 @@ msgstr ""
#, no-wrap
msgid ""
"~~~~\n"
"# fn each(v: &[int], op:
&fn(v: &int)
) { }\n"
"# fn each(v: &[int], op:
|v: &int|
) { }\n"
"# fn do_some_work(i: &int) { }\n"
"each([1, 2, 3], |n| {\n"
" do_some_work(n);\n"
...
...
@@ -2788,7 +2788,7 @@ msgstr ""
#, no-wrap
msgid ""
"~~~~\n"
"# fn each(v: &[int], op:
&fn(v: &int)
) { }\n"
"# fn each(v: &[int], op:
|v: &int|
) { }\n"
"# fn do_some_work(i: &int) { }\n"
"do each([1, 2, 3]) |n| {\n"
" do_some_work(n);\n"
...
...
@@ -3080,7 +3080,7 @@ msgstr ""
#, no-wrap
msgid ""
"~~~~\n"
"fn map<T, U>(vector: &[T], function:
&fn(v: &T)
-> U) -> ~[U] {\n"
"fn map<T, U>(vector: &[T], function:
|v: &T|
-> U) -> ~[U] {\n"
" let mut accumulator = ~[];\n"
" for element in vector.iter() {\n"
" accumulator.push(function(element));\n"
...
...
doc/rust.md
浏览文件 @
ef70b766
...
...
@@ -950,10 +950,10 @@ declared, in an angle-bracket-enclosed, comma-separated list following
the function name.
~~~~ {.xfail-test}
fn iter<T>(seq: &[T], f:
&fn(T)
) {
fn iter<T>(seq: &[T], f:
|T|
) {
for elt in seq.iter() { f(elt); }
}
fn map<T, U>(seq: &[T], f:
&fn(T)
-> U) -> ~[U] {
fn map<T, U>(seq: &[T], f:
|T|
-> U) -> ~[U] {
let mut acc = ~[];
for elt in seq.iter() { acc.push(f(elt)); }
acc
...
...
@@ -1314,7 +1314,7 @@ These appear after the trait name, using the same syntax used in [generic functi
trait Seq<T> {
fn len(&self) -> uint;
fn elt_at(&self, n: uint) -> T;
fn iter(&self,
&fn(T)
);
fn iter(&self,
|T|
);
}
~~~~
...
...
@@ -2607,7 +2607,7 @@ as an abbreviation for defining and capturing a separate function.
Significantly, lambda expressions _capture their environment_,
which regular [function definitions](#functions) do not.
The exact type of capture depends on the [function type](#function-types) inferred for the lambda expression.
In the simplest and least-expensive form (analogous to a ```
&fn()
{ }``` expression),
In the simplest and least-expensive form (analogous to a ```
||
{ }``` expression),
the lambda expression captures its environment by reference,
effectively borrowing pointers to all outer variables mentioned inside the function.
Alternately, the compiler may infer that a lambda expression should copy or move values (depending on their type.)
...
...
@@ -2617,7 +2617,7 @@ In this example, we define a function `ten_times` that takes a higher-order func
and call it with a lambda expression as an argument.
~~~~
fn ten_times(f:
&fn(int)
) {
fn ten_times(f:
|int|
) {
let mut i = 0;
while i < 10 {
f(i);
...
...
@@ -2726,7 +2726,7 @@ If the `expr` is a [field expression](#field-expressions), it is parsed as thoug
In this example, both calls to `
f
` are equivalent:
~~~~
# fn f(f:
&fn(int)
) { }
# fn f(f:
|int|
) { }
# fn g(i: int) { }
f(|j| g(j));
...
...
@@ -2739,7 +2739,7 @@ do f |j| {
In this example, both calls to the (binary) function `
k
` are equivalent:
~~~~
# fn k(x:int, f:
&fn(int)
) { }
# fn k(x:int, f:
|int|
) { }
# fn l(i: int) { }
k(3, |j| l(j));
...
...
@@ -3241,7 +3241,7 @@ and the cast expression in `main`.
Within the body of an item that has type parameter declarations, the names of its type parameters are types:
~~~~
fn map<A: Clone, B: Clone>(f:
&fn(A)
-> B, xs: &[A]) -> ~[B] {
fn map<A: Clone, B: Clone>(f:
|A|
-> B, xs: &[A]) -> ~[B] {
if xs.len() == 0 {
return ~[];
}
...
...
doc/tutorial.md
浏览文件 @
ef70b766
...
...
@@ -1366,7 +1366,7 @@ Rust also supports _closures_, functions that can access variables in
the enclosing scope.
~~~~
fn call_closure_with_ten(b:
&fn(int)
) { b(10); }
fn call_closure_with_ten(b:
|int|
) { b(10); }
let captured_var = 20;
let closure = |arg| println!("captured_var={}, arg={}", captured_var, arg);
...
...
@@ -1390,7 +1390,7 @@ let square = |x: int| -> uint { (x * x) as uint };
~~~~
There are several forms of closure, each with its own role. The most
common, called a _stack closure_, has type
`
&fn
`
and can directly
common, called a _stack closure_, has type
`
||
`
and can directly
access local variables in the enclosing scope.
~~~~
...
...
@@ -1420,13 +1420,13 @@ for spawning [tasks][tasks].
Rust closures have a convenient subtyping property: you can pass any kind of
closure (as long as the arguments and return types match) to functions
that expect a
`
&fn()
`
. Thus, when writing a higher-order function that
that expect a
`
||
`
. Thus, when writing a higher-order function that
only calls its function argument, and does nothing else with it, you
should almost always declare the type of that argument as
`
&fn()
`
. That way,
should almost always declare the type of that argument as
`
||
`
. That way,
callers may pass any kind of closure.
~~~~
fn call_twice(f:
&fn()
) { f(); f(); }
fn call_twice(f:
||
) { f(); f(); }
let closure = || { "I'm a closure, and it doesn't matter what type I am"; };
fn function() { "I'm a normal function"; }
call_twice(closure);
...
...
@@ -1446,7 +1446,7 @@ Consider this function that iterates over a vector of
integers, passing in a pointer to each integer in the vector:
~~~~
fn each(v: &[int], op:
&fn(v: &int)
) {
fn each(v: &[int], op:
|v: &int|
) {
let mut n = 0;
while n < v.len() {
op(&v[n]);
...
...
@@ -1460,7 +1460,7 @@ argument, we can write it in a way that has a pleasant, block-like
structure.
~~~~
# fn each(v: &[int], op:
&fn(v: &int)
) { }
# fn each(v: &[int], op:
|v: &int|
) { }
# fn do_some_work(i: &int) { }
each([1, 2, 3], |n| {
do_some_work(n);
...
...
@@ -1471,7 +1471,7 @@ This is such a useful pattern that Rust has a special form of function
call that can be written more like a built-in control structure:
~~~~
# fn each(v: &[int], op:
&fn(v: &int)
) { }
# fn each(v: &[int], op:
|v: &int|
) { }
# fn do_some_work(i: &int) { }
do each([1, 2, 3]) |n| {
do_some_work(n);
...
...
@@ -1650,7 +1650,7 @@ vector consisting of the result of applying `function` to each element
of
`vector`
:
~~~~
fn map<T, U>(vector: &[T], function:
&fn(v: &T)
-> U) -> ~[U] {
fn map<T, U>(vector: &[T], function:
|v: &T|
-> U) -> ~[U] {
let mut accumulator = ~[];
for element in vector.iter() {
accumulator.push(function(element));
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录