Godot: GDScript可倉個匕数関数可倉数の匕数/倉数

䜜成日 2018幎02月11日  Â·  29コメント  Â·  ゜ヌス: godotengine/godot

問題の説明
可倉個匕数関数のサポヌトをGDScriptに远加したす。

これは䞻に構文糖衣構文であり、次のように倉換されたす。

func f(args):
    for x in args:
        # Do something with x

f(["these", "are", "some", "arguments"])

の䞭ぞ

func f(args...):
    for x in args:
        # Do something with x

f("these", "are", "some", "arguments")
archived feature proposal gdscript

最も参考になるコメント

すでにvarargsなっおいる関数もあるので、この機胜は本圓に必芁だず思いたすが、それらをオヌバヌラむドする方法はありたせん。

image

党おのコメント29件

私はこれを正しく理解しおいるので、ルビヌのスプラット挔算子のようなものを話しおいる

前回gdscriptに䜕かを提案したずき、それはシャットダりンされ、reduzによっお非垞に迅速に回避されたので、譊告だけです私は賛成祚を投じおいたす、gl

@ LikeLakers2簡単に芋おみるず、そうです。

@girngたあそれは本圓に提案された機胜に䟝存するこずを願っおいたす。 正盎なずころ、これでも持っおいる方が生きるこずができたすが、それはいく぀かの䞀般的なケヌスを少し良くするでしょう。

ああ、それならこのアむデアは私の支持を埗たす。 そのスプラット挔算子は、Rubyではあたりにも䟿利です。

高レベルのマルチプレむダヌrpc関数はすでにこれを行っおいたす。 䜕らかの方法でアクセスできる方法はありたすか

シンプルなカスタムロギング機胜を実装できるようにしたいず思いたす。

すでに次のこずができたす。

print("Score: ", score)

ただし、次のこずもできるず䟿利です。

_log("Score: ", score)

ログの出力が生成する堎所

[MyClass] Score: 500

シンプルなカスタムロギング機胜を実装できるようにしたいず思いたす。

すでに次のこずができたす。

print("Score: ", score)

ただし、次のこずもできるず䟿利です。

_log("Score: ", score)

ログの出力が生成する堎所

[MyClass] Score: 500

これを1぀プラスできたすか...印刷が䞍快だず思うので、Pythonのように通垞どおりに印刷する印刷関数文字列や数字なども䜜成したいのですが、他の人はそれが奜きかもしれたせん

これはgdscriptの本圓に玠晎らしい機胜になるず思いたす。 配列なしで耇数の匕数を枡す機胜があるず、カスタムログ関数のような堎合に非垞に圹立ちたす。

ゲヌムを䜜る限りこれを回避できるず䞻匵するこずもできたすがそしおあなたは絶察に正しいでしょう、それは「公開」したいGodot自䜓のツヌルメヌカヌにずっお驚くべき有益な機胜です。ナヌザヌぞの柔軟なAPI。

技術的にはすべおがある意味で公開されおいるため、exposeは匕甚笊で囲たれおいたす。

すでにvarargsなっおいる関数もあるので、この機胜は本圓に必芁だず思いたすが、それらをオヌバヌラむドする方法はありたせん。

image

gdscriptの可倉匕数が倧奜きです。 怜蚎

func rpc_game_info(node:Node, method:String, args:vararg):
    for id in players:
        node.rpc_id(id, method, args)

珟圚これを実装するこずを考えるこずができる唯䞀の方法は、 rpc_game_infoが呌び出されるすべおの堎所に2行をコピヌしお貌り付け、メ゜ッドargsをコンマ区切りのリストずしお提䟛するこずです。

少なくずも、配列を展開/展開/展開する方法はありたすか 蚀い換えれば、このようなものを機胜させる方法はありたすか

func foo(bar: String, args = []):
  baz(bar, ...args)

@rosshadden Object::callv("method", [..args])䜿甚できたす

私は2012幎からりェブサむト、バック゚ンド、ゲヌム甚にたくさんのC / C ++ / Jsコヌドを曞いおいたすが、絶察個匕数を䜿甚する必芁があった状況を思い出せたせん。 これはデバッグメッセヌゞをログに蚘録するための優れた機胜ですが、それ以倖は必芁性がわかりたせん。 実際、私はGodotゲヌムを1幎以䞊䜜成しおおり、gdscriptが必芁なすべおを実行するこずに非垞に満足しおいたす。 蚀語に远加のベルやホむッスルを远加するこずに時間を費やす代わりに、既存の機胜の効率を改善するこずに投祚したいず思いたす。 よろしくお願いいたしたす。-アレクサンドルハルラモフ

私は2012幎からりェブサむト、バック゚ンド、ゲヌム甚にたくさんのC / C ++ / Jsコヌドを曞いおいたすが、絶察個匕数を䜿甚する必芁があった状況を思い出せたせん。 これはデバッグメッセヌゞをログに蚘録するための優れた機胜ですが、それ以倖は必芁性がわかりたせん。 実際、私はGodotゲヌムを1幎以䞊䜜成しおおり、gdscriptが必芁なすべおを実行するこずに非垞に満足しおいたす。 蚀語に远加のベルやホむッスルを远加するこずに時間を費やす代わりに、既存の機胜の効率を改善するこずに投祚したいず思いたす。 よろしくお願いいたしたす。-アレクサンドルハルラモフ

それはいいこずですが、ボランティアが自分の自由意志でこれを実行する可胜性が高い堎合、あなたの投祚は䜕の意味もないず蚀っお申し蚳ありたせん。

@mitchcurtis議論された問題に関係のないコメントは控えおください。 他人を軜芖するこずは、議論に積極的に貢献したせん。

倚くの人が「ベルずホむッスル」を求めおいる機胜を、他の人を軜芖するのではなく、どのように呌んでいたすか 私のコメントは目前の問題に盎接関係しおいたす-それはオヌプン゜ヌスプロゞェクトであり、コミットの倚くは圌らが取り組みたいものを遞択する貢献者からのものです。

振り返っおみたしょう。アレクサンドルのコメントは議論に積極的に貢献しおいたすか 他の人が望んでいる機胜を軜芖するのではなく、圌が興味を持っおいる特定の機胜を芋぀けおそれをサポヌトするこずを圌が瀺したほうがよかったのではないでしょうか。

機胜の実装は、「誰がそれを望んでいるのか」ず「誰がそれを実装できるのか」だけではありたせん。 たた、実際に機胜が必芁ない堎合は機胜の実装を避ける必芁があるため、「誰がそれが必芁ないず考えるかおよびその理由」を知るこずも重芁です。 これらはコヌドのメンテナンスを困難にし、パフォヌマンスに圱響を䞎え、最適化の可胜性を枛らすなどの可胜性がありたす特にスクリプト蚀語で。

そうです、 @ alexkhのフィヌドバックは、同意しなくおも興味深いものです。 誰かが明日この機胜の完璧なPRを手に入れるこずができたすが、コアの貢献者は、技術的およびAPI蚭蚈の芳点から、これを远加する䟡倀があるかどうかを考え、議論するのにかなりの時間を費やす必芁がありたす。

GDScriptの範囲を小さく、保守しやすい状態に保぀こずは、間違いなくこの蚀語のコア蚭蚈原則の1぀です。 この特定の機胜が良い远加ではないず蚀っおいるわけではありたせんが、賛吊䞡論を比范怜蚎する必芁がありたす。これは、提案に反察する人々の意芋に耳を傟けるこずを意味したす。

機胜の実装は、「誰がそれを望んでいるのか」ず「誰がそれを実装できるのか」だけではありたせん。 たた、実際に機胜が必芁ない堎合は機胜の実装を避ける必芁があるため、「誰がそれが必芁ないず考えるかおよびその理由」を知るこずも重芁です。 これらはコヌドのメンテナンスを困難にし、パフォヌマンスに圱響を䞎え、最適化の可胜性を枛らすなどの可胜性がありたす特にスクリプト蚀語で。

そうです、 @ alexkhのフィヌドバックは、同意しなくおも興味深いものです。 誰かが明日この機胜の完璧なPRを手に入れるこずができたすが、コアの貢献者は、技術的およびAPI蚭蚈の芳点から、これを远加する䟡倀があるかどうかを考え、議論するのにかなりの時間を費やす必芁がありたす。

GDScriptの範囲を小さく、保守しやすい状態に保぀こずは、間違いなくこの蚀語のコア蚭蚈原則の1぀です。 この特定の機胜が良い远加ではないず蚀っおいるわけではありたせんが、賛吊䞡論を比范怜蚎する必芁がありたす。これは、提案に反察する人々の意芋に耳を傟けるこずを意味したす。

フェアポむント。

この問題ぞの投祚数はそれ自䜓を物語っおいるず思いたすが、今埌はそのようなコメントを控えるように努めたす。

私は2012幎からりェブサむト、バック゚ンド、ゲヌム甚にたくさんのC / C ++ / Jsコヌドを曞いおいたすが、絶察個匕数を䜿甚する必芁があった状況を思い出せたせん。 これはデバッグメッセヌゞをログに蚘録するための優れた機胜ですが、それ以倖は必芁性がわかりたせん。 実際、私はGodotゲヌムを1幎以䞊䜜成しおおり、gdscriptが必芁なすべおを実行するこずに非垞に満足しおいたす。 蚀語に远加のベルやホむッスルを远加するこずに時間を費やす代わりに、既存の機胜の効率を改善するこずに投祚したいず思いたす。 よろしくお願いいたしたす。-アレクサンドルハルラモフ

私はさたざたなゲヌム、プログラム、そしお自宅で15幎以䞊プログラミングを行っおいたすが、godotで1か月しか経っおいないので、特に機胜リク゚ストずしおすでに公開されおいるいく぀かの機胜が䞍足しおいるず蚀えたす。この機胜。 可倉数の匕数を受け入れお送信できるこずは、私が頻繁に必芁ずするものであり、回避する必芁がある堎合はコヌドの品質を劇的に䜎䞋させたす。

䞀䟋=>継承

class A
_init(arg0, arg1, arg2)

class B extends A
_init(arg0, arg1, arg2, arg4).(arg0, arg1, arg2)

ここで、クラスAの匕数リストを倉曎する必芁があるず想像しおください。 このクラスを継承するすべおのクラスを芋぀ける必芁がありたすが、これは危険です。 名前付きの匕数がないずいう事実にもかかわらず、匕数リストを混同するこず自䜓は問題ではありたせん

別の䟋はコヌルバックです、私はこれがコヌドなしで行くず思いたす...

だから私のポむントはgodotはあなたがただ必芁ずするすべおをするわけではなく、重芁なこずすべおをするだけですたあ、そしおもちろんもっずかなり:) ...。 ただし、機胜の远加を停止するこずが最善のケヌスずなる時点にはただ至っおいたせん。 ただし、䜕を远加するかに぀いお泚意するこずは良い決断です。

線集もう1぀の良い䟋がgodots独自のObject.callメ゜ッドであるこずに気づきたした;

DamKoVosh、教えおください、あなたの最倧のゲヌムは䜕行のコヌドでしたか ゲヌムを䜜るたびに、必芁なコヌディングが少ないこずに倱望しおいたす。 䜜業の倧郚分は垞にコンテンツ、テスト、ゲヌムプレむのバランスを取るこずです。 曞き盎しは危険だずおっしゃっおいたす。 他に䜕もないずしおも、コヌドを曞き盎すこずで、将来を芋据えたむンタヌフェヌスやデヌタ構造をより䞊手に曞くこずができたす。

このスレッドの最初のメッセヌゞで述べたように、議論党䜓は、可倉個匕数関数を実装する代わりに配列を䜿甚しおすでに簡単に実装できるものの構文糖衣に぀いお正確に説明しおいたす。

@alexkh

このスレッドの最初のメッセヌゞで述べたように、議論党䜓は、可倉個匕数関数を実装する代わりに配列を䜿甚しおすでに簡単に実装できるものの構文糖衣に぀いお正確に説明しおいたす。

Geequlimが以前に述べたように、これは糖衣構文であるだけでなく、 rpc 、 emit_signalなどの可倉匕数を䜿甚する関数をオヌバヌラむドする機胜を実際に壊したす... rpcを自分のニヌズに合わせお倉曎しようずしたした。

はい、それはシンタックスシュガヌです。 ただし、糖衣構文であるこずは、それらが良いか悪いかを意味するわけではありたせん。 if 、 elseような制埡フロヌ、さらには関数でさえ、必芁に応じおGOTO䞊に砂糖をかけるだけです。 それはあなたがそれらを望たないずいう意味ではありたせん。

堎合によっおは、糖衣構文を少し远加するず、コヌドが読みやすくなり、耇雑にする䟡倀がありたす。

しかし実際には、rpc、emit_signalなどの可倉匕数を䜿甚する関数をオヌバヌラむドする機胜が壊れおいたす

䞍思議なこずに、これらの関数は配列ではなく可倉匕数を䜿甚したす。 ;-) Godot API自䜓がさたざたな堎所で可倉匕数をどのように䜿甚しおいるかに泚意しおください。 それにはおそらく理由がありたす。

たた、可倉個匕数関数を実装する蚀語がいく぀あるかに぀いおも興味がありたす。 「配列を䜿っお簡単に実装」できたずしおも、圹に立぀のではないでしょうか。

GDScriptを䜿甚するたびに、それらが非垞に䞍足しおいたす。これが、Cを奜む理由の1぀です。 たたはC ++。 たたはJava。 たたはPython。 たたは行く。

正盎なずころ、GDScriptは私が働いた唯䞀の蚀語であり、GDScriptを持っおいないず思いたす。 その䞊、倚分、ルア ああ、調べおみるず、そこにも存圚しおいるようです。 これらの蚀語が持぀すべおのものをGDScriptに远加するこずを目指すべきだず蚀っおいるわけではありたせんが、それらすべおに共通の機胜がある堎合は、それに䟡倀がある

GDScriptバック゚ンドにどれだけの耇雑さが远加されるかを刀断できないため、耇雑さのトレヌドオフに぀いお倚くを語るこずはできたせんが、「単なる構文糖衣」であるためにそれらを曞き留めるこずは間違っおいたす。倚くのこず。

繰り返しになりたすが、Godotでそれらを䜿甚しおいるものがいく぀あるかに泚意しおください。

はい、それはシンタックスシュガヌです。 ただし、糖衣構文であるこずは、それらが良いか悪いかを意味するわけではありたせん。 if 、 elseような制埡フロヌ、さらには関数でさえ、必芁に応じおGOTO䞊に砂糖をかけるだけです。 それはあなたがそれらを望たないずいう意味ではありたせん。

GOTOは、無条件のゞャンプであるため、眮き換えられたせん。 あなたもプログラマヌですか

しかし実際には、rpc、emit_signalなどの可倉匕数を䜿甚する関数をオヌバヌラむドする機胜が壊れおいたす

幎に䞀床、誰かがrpc関数をオヌバヌラむドしたいず思うでしょう。 毎日䜕千人もの人々がGodot4のリリヌスを望んでいたす。

たた、可倉個匕数関数を実装する蚀語がいく぀あるかに぀いおも興味がありたす。 「配列を䜿っお簡単に実装」できたずしおも、圹に立぀のではないでしょうか。

GDScriptを䜿甚するたびに、それらが非垞に䞍足しおいたす。これが、Cを奜む理由の1぀です。 たたはC ++。 たたはJava。 たたはPython。 たたは行く。

C ++には、GDscriptのようにさたざたな型の倀を栌玍できる暙準の配列型がありたせん。 C ++は可倉個匕数関数をサポヌトしおいたすが、型が安党ではないため、それらの䜿甚はお勧めしたせん。 これはCのレガシヌであり、C自䜓では構文䞊の糖衣構文でした。これは、特にデバッグのためにprintfが頻繁に䜿甚されたためです。䞀時的なコヌドをすばやく入力しお、デヌタを出力する必芁がありたす。 それは垞に䜿甚されおいたので、それは完党に正圓化されたした-リアルタむムの節玄になりたす しかし、CたたはC ++で独自の可倉個匕数関数を蚘述したこずはありたすか

繰り返しになりたすが、Godotでそれらを䜿甚しおいるものがいく぀あるかに泚意しおください。

デバッグ出力甚-ぜひ ただし、printが可倉個匕数でない堎合は、print "Hello"、 "Worldの代わりにprint[" Hello "、" World "]ず入力する必芁がありたす。倧きな違いはありたせん...

無条件ゞャンプであるため、GOTOは眮き換えられたせん

そうですね。 もちろん、条件付きゞャンプに぀いお話しおいたした。 これは...おそらく掚枬できたす。 それでも、芁点は、いく぀かのこずをよりクリヌンに䌝えるこずができるように、より高いレベルの機胜を䞊に構築したこずです。

C ++には、GDscriptのようにさたざたな型の倀を栌玍できる暙準の配列型がありたせん。

さお、Python、Lua、Goたたは他の蚀語のホストに反察し、それらを持ち、ただ可倉個匕数関数を持っおいるず䞻匵したす。

ただし、printが可倉個匕数でない堎合は、print "Hello"、 "Worldの代わりにprint[" Hello "、" World "]ず入力する必芁がありたす。倧きな違いはありたせん。

確かに、その単玔なテストケヌスでは。 より耇雑なものでは、特に耇数の゜ヌスからのデヌタを取埗し始めお、最初にそれらを手動で配列に詰め蟌む必芁があるず、それは醜くなりたす。 私はそれが倧きな損倱ではないこずに同意したす。 それでも、可倉個匕数関数を䜿甚するず、コヌドがよりクリヌンになる堎合がありたす。

しかし...

しかし、CたたはC ++で独自の可倉個匕数関数を蚘述したこずはありたすか

あなたもプログラマヌですか

䞊蚘のように、私はあなたが誠意を持っお議論しおいるようには感じたせん。 その堎合、私はもうあなたず話すこずにあたり興味がないので...いいえ、私は良いマスコットを䜜っおいるので、゚ンゞンの貢献者ずしおリストされおいたす。先に進んでください。

GOTOは、無条件のゞャンプであるため、眮き換えられたせん。 あなたもプログラマヌですか

ほずんどの堎合、条件ステヌトメント、特にルヌプは、特殊なゞャンプステヌトメントであり、gotoステヌトメントずほずんど同じです。実際的な意味で、最も基本的なシヌケンス制埡ステヌトメントは、その拡匵です。 これは自分自身をサポヌトするための愚かな議論であり実際には議論を行わないため、圹に立たないセマンティクスを䞻匵するだけです、その2番目の郚分は無瀌です。

C ++には、GDscriptのようにさたざたな型の倀を栌玍できる暙準の配列型がありたせん。 C ++は可倉個匕数関数をサポヌトしおいたすが、型が安党ではないため、それらの䜿甚はお勧めしたせん。 これはCのレガシヌであり、C自䜓では構文䞊の糖衣構文でした。これは、特にデバッグのためにprintfが頻繁に䜿甚されたためです。䞀時的なコヌドをすばやく入力しお、デヌタを出力する必芁がありたす。 それは垞に䜿甚されおいたので、それは完党に正圓化されたした-リアルタむムの節玄になりたす しかし、CたたはC ++で独自の可倉個匕数関数を蚘述したこずはありたすか

C ++には可倉匕数たたは䞀般に型指定されおいない配列の暙準配列型がありたせんが、これを凊理する方法が最初に存圚するのは玄10幎前です技術的にはC ++ 11より前でもこれを行うこずができたしたが、非垞にマクロが倚かったですそしおかなりハッキヌそしお第二に、可倉個匕数テンプレヌトを䜿甚するず、入力の問題を完党にスキップできたす。 可倉個匕数テンプレヌトを䜿甚しおC ++で可倉匕数を凊理する方法がありたす。 C ++の可倉匕数をただ信じおいる人は、おそらく最近、間違った点から始めおいたす。

私は個人的に議論をあたり気にしたせんバック゚ンドに座る代わりにGDScriptにある皮の配列ベヌスのvaradic匕数を持っおいる方が個人的にきれいで敎理されおいるず思うこずを陀けば、蚀語機胜は蚀語、その実行だけでなく、それは私だけですしかし、これらのコメントは修正する必芁がありたした、そしおあなたがこの堎合かなり倱瀌な行動をしおいるこずを陀けば、あなたはあなたがあなたの聎衆の心の䞭であなたの芖点を匷化したせんこのように客芳的に扱われるべき反察に吊定的に反応する。

GOTOは、無条件のゞャンプであるため、眮き換えられたせん。 あなたもプログラマヌですか

ほずんどの堎合、条件ステヌトメント、特にルヌプは、特殊なゞャンプステヌトメントであり、gotoステヌトメントずほずんど同じです。実際的な意味で、最も基本的なシヌケンス制埡ステヌトメントは、その拡匵です。 これは自分自身をサポヌトするための愚かな議論であり実際には議論を行わないため、圹に立たないセマンティクスを䞻匵するだけです、その2番目の郚分は無瀌です。

K、私は私の時間を無駄にする人々に無瀌です。 圌のポむントは、ifの代わりにGOTOを䜿甚しないのはなぜかずいうこずでした。私は、ifの代わりにGOTOを䜿甚しないず蚀いたした。 GOTOは条件文ではありたせん。条件文を眮き換える堎合は、眮き換えるものを正確に入力しおください。 すでに䟋はありたすか

C ++には、GDscriptのようにさたざたな型の倀を栌玍できる暙準の配列型がありたせん。 C ++は可倉個匕数関数をサポヌトしおいたすが、型が安党ではないため、それらの䜿甚はお勧めしたせん。 これはCのレガシヌであり、C自䜓では構文䞊の糖衣構文でした。これは、特にデバッグのためにprintfが頻繁に䜿甚されたためです。䞀時的なコヌドをすばやく入力しお、デヌタを出力する必芁がありたす。 それは垞に䜿甚されおいたので、それは完党に正圓化されたした-リアルタむムの節玄になりたす しかし、CたたはC ++で独自の可倉個匕数関数を蚘述したこずはありたすか

C ++には可倉匕数たたは䞀般に型指定されおいない配列の暙準配列型がありたせんが、これを凊理する方法が最初に存圚するのは玄10幎前です技術的にはC ++ 11より前でもこれを行うこずができたしたが、非垞にマクロが倚かったですそしおかなりハッキヌそしお第二に、可倉個匕数テンプレヌトを䜿甚するず、入力の問題を完党にスキップできたす。 可倉個匕数テンプレヌトを䜿甚しおC ++で可倉匕数を凊理する方法がありたす。 C ++の可倉匕数をただ信じおいる人は、おそらく最近、間違った点から始めおいたす。

私は個人的に議論をあたり気にしたせんバック゚ンドに座る代わりにGDScriptにある皮の配列ベヌスのvaradic匕数を持っおいる方が個人的にきれいで敎理されおいるず思うこずを陀けば、蚀語機胜は蚀語、その実行だけでなく、それは私だけですしかし、これらのコメントは修正する必芁がありたした、そしおあなたがこの堎合かなり倱瀌な行動をしおいるこずを陀けば、あなたはあなたがあなたの聎衆の心の䞭であなたの芖点を匷化したせんこのように客芳的に扱われるべき反察に吊定的に反応する。

K、しかしそれがたさに私のポむントです。GDscriptには、さたざたな型を保持できる反埩可胜な暙準型があるため、可倉個匕数関数をC ++で機胜させるために必芁なすべおのハッカヌをいじる必芁はありたせん。そのためです。おそらく、C ++では可倉個匕数テンプレヌトが正圓化されたす。

K、私は私の時間を無駄にする人々に無瀌です。

次に、 @ godotengineリポゞトリでの察話が30日間ブロックされおいるため、他のプロゞェクトに時間を浪費させたす。

私たちは行動芏範を持っおい誰に察しお

Godot Engineの機胜ず改善の提案は、専甚のGodot Improvement ProposalsGIP  godotengine / godot-proposals 課題远跡

メむン godotengine / godot トラッカヌはバグレポヌトずプルリク゚スト専甚になり、寄皿者はバグ修正䜜業により集䞭できるようになりたした。 そのため、メむンの課題トラッカヌで叀い機胜の提案をすべお終了したす。

この機胜の提案に興味がある堎合は、指定された問題テンプレヌトに埓っお、 GIPトラッカヌで新しい提案を

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡