0

このコードスニペットでfields-typesは、最終的に関数によって変更されto-camel-caseますが、ローカル変数として親関数に渡されます。

fields-types: ["First Name" "string" "Last Name" "string" "Age" "int"]

to-camel-case: function [name] [
    name/1: lowercase name/1
    replace/all name space ""
]

fill-template-body: func [
    field-labels-types [block!] /local vars fields-names-types
] [
  vars: [member-name member-type]
  field-names-types: copy []
  foreach [field-label field-type] field-labels-types [
      append field-names-types to-camel-case field-label
      append field-names-types field-type
  ]
]

fill-template-body fields-types

実行すると:

>> fill-template-body fields-types
== ["firstName" "string" "lastName" "string" "age" "int"]
>> fields-types
== ["firstName" "string" "lastName" "string" "age" "int"]
>>

私はそのフィールドタイプを不変のままにしておきたいのですが:

fields-types: ["First Name" "string" "Last Name" "string" "Age" "int"]

もちろんto-camel-case、名前のコピーを使用するように変更することでこれを回避することもできますが、それは私がしなければならないと思うことではありません。

Scalaにvarandキーワードのようなものはありますか?val

4

2 に答える 2

1

キャメルケース関数は元の値で動作するため、元の値を保持する場合は、それをコピーして、変更された値を返す必要があります。関数はテンプレートに作用するので、テンプレートをコピーする必要がありますか?

したがって、次のようなものが機能するはずです。

fill-template-body: func[ labels [block!] /local field-labels-types vars fields-names-types][
  field-labels-types: copy labels
..
于 2010-07-31T22:29:12.970 に答える
1

変数はREBOLの醜い言葉であり、言葉も含めてすべてが値です。これはセマンティックなニュースピークではなく、REBOLの流れを理解するのに役立ちます。

値は、メモリ内の1つの巨大な配列に含まれていると思います。ここで、REBOL(言語)は、単語とそのコンテキストを使用して、値を参照および操作します。ほとんどのREBOL関数は、これらの値を複製せずに動作します。

head lowercase next uppercase str: "abcd"
remove back tail str

これはREBOLの最も効率的な機能の1つです。中間プロセスのコピーは必要ありません。これを要求するのは無駄です。を使用するたびにreplaceuppercaseまたはto-camel-case値が重複する場所で配列が大きくなることを考えてみてください。プロセス全体は、複製ではなく変更を前提として構築できます。実際、コンテキストは、必ずしも値を返す必要なしに構築できます。

remove-spaces: use [space mark][
    space: charset " ^-"
    [any [mark: space (remove mark) | skip]]
]

parse/all str: "Should Be No Spaces" remove-spaces

トリックは、値をコピーする場所を知るようになり、簡潔な表現のためのREBOLの贈り物と交差すると思います。

parse/all link: copy title: "An Article on REBOL" remove-spaces
print ["(" link ")" title]

to-camel-case copy field-label

そしてもちろん、変更には限界があります。時にはそれは最初からよりきれいな建物です。

于 2010-07-31T18:05:21.427 に答える