Rebol 编程/face
外观
< Rebol 编程
EXTRACT series width /index pos /default value /into output
从系列中以规律的间隔提取值。
EXTRACT 是一个函数值。
- series -- (类型:系列)
- width -- 每个条目的大小(跳过)(类型:整数)
- /index -- 从偏移位置提取
- pos -- 位置 (类型:任何)
- /default -- 使用默认值而不是 None
- value -- 要使用的值(如果为函数,每次调用时都会被调用)(类型:任何)
- /into -- 将其插入缓冲区而不是返回 (返回插入后的位置)
- output -- 缓冲区系列 (已修改) (类型:系列)
- 捕获
extract: func [
{Extracts a value from a series at regular intervals.}
[catch]
series [series!]
width [integer!] "Size of each entry (the skip)"
/index "Extract from an offset position"
pos "The position" [number! logic! block!]
/default "Use a default value instead of none"
value {The value to use (will be called each time if a function)}
/into {Insert into a buffer instead (returns position after insert)}
output [series!] "The buffer series (modified)"
/local len val
][
if zero? width [return any [output make series 0]]
len: either positive? width [
divide length? series width
] [
divide index? series negate width
]
unless index [pos: 1]
either block? pos [
if empty? pos [return any [output make series 0]]
parse pos [some [number! | logic! | set pos skip (
throw-error 'script 'expect-set reduce [[number! logic!] type? get/any 'pos]
)]]
unless into [output: make series len * length? pos]
if all [not default any-string? output] [value: copy ""]
if binary? series [series: as-string series]
forskip series width [forall pos [
if none? set/any 'val pick series pos/1 [set/any 'val value]
output: insert/only output get/any 'val
]]
] [
unless into [output: make series len]
if all [not default any-string? output] [value: copy ""]
if binary? series [series: as-string series]
forskip series width [
if none? set/any 'val pick series pos [set/any 'val value]
output: insert/only output get/any 'val
]
]
either into [output] [head output]
]