Benzer bir işlev (Rebol2) sadece birkaç gün önce:
build-object: func [
"Builds an object from a block"
names [block!] "Field names"
/values val [block!] "Initial values"
/local o name value
] [
o: copy []
names: compose names
o: either values [
parse names [
some [
set name [word! | set-word!]
(append o to-set-word name)
| skip
]
]
set/pad reflect o: context append o none 'words val
o
] [
if any [
parse names [
some [
set name [word! | set-word!]
(append o reduce [to-set-word name none])
]
]
parse names [
(clear o) some [
set name [word! | set-word!] set value any-type!
(append o reduce [to-set-word name :value])
]
]
] [context o]
]
o
]
Eğer herhangi yazabilirsiniz senin nesneyi oluşturmak için: (f: does ["x"]
olarak bir işlev oluşturmak)
build-object [name "Fork" id 1020]
build-object [name: "Fork" id: 1020]
build-object/values [name id] ["Fork" 1020]
build-object/values [name: id:] ["Fork" 1020]
build-object [name f]
build-object [name (f)] ;block is composed
build-object [name 5 id f]
build-object [name 5 id 'f]
, ör değerleri dışarıda bırakın durumunda da none
olarak ayarlanmış alanlara sahip nesneler yapabilir Ayrıca tanımsız değerler ayarlayarak izin vermek isterseniz
func [
"Create an object based on some words and values."
words [any-word! block!] "Word or block of words"
values [any-type!] "Value or block of values"
/local object
][
object: make object! either block? words [length? words] [1]
set bind/copy/new :words object :values
object
]
, bu deneyin:
func [
"Create an object based on some words and values."
words [any-word! block!] "Word or block of words"
values [any-type!] "Value or block of values"
/any "Allows setting words to any value, including unset"
/local object
][
object: make object! either block? words [length? words] [1]
apply :set [bind/copy/new :words object :values any]
object
]
Bunların her ikisi de nesneleri oluşturmak
build-object [name id]
Kod örneklerinizden birincisi (işlevin bir isme ihtiyacı olabilir) kısa ve temiz ve bana göre en iyi şekilde görünüyor. – Ladislav