আর্গুমেন্ট হিসাবে অ্যারে আনপ্যাকিং করুন


108

সুতরাং পাইথন এবং রুবিতে একটি অ্যারেকে আর্গুমেন্ট হিসাবে আনপ্যাক করার জন্য স্প্ল্যাট অপারেটর (*) রয়েছে। জাভাস্ক্রিপ্টে। অ্যাপ্লিকেশন () ফাংশন রয়েছে। গো-এ ফাংশন আর্গুমেন্ট হিসাবে অ্যারে / স্লাইস প্যাক করার কোনও উপায় আছে? এর জন্য কোনও সংস্থান পাশাপাশি দুর্দান্ত হবে!

এর লাইন বরাবর কিছু:

func my_func(a, b int) (int) {
    return a + b
}

func main() {
    arr := []int{2,4}
    sum := my_func(arr)
}

আমি যদি সিনট্যাক্টিক্যাল / মিসরড ভুল করে থাকি তবে আমি ক্ষমা চাই। আমি যেতে নতুন।


4
প্রথমত, arrএকটি অ্যারে নয়। এটি একটি টুকরা
newacct

উত্তর:


165

আপনি সি এর মতো একটি ভারারগ সিনট্যাক্স ব্যবহার করতে পারেন:

package main
import "fmt"

func my_func( args ...int) int {
   sum := 0
   for _,v := range args {
      sum = sum + v
   }

   return sum;
}

func main() {
    arr := []int{2,4}
    sum := my_func(arr...)
    fmt.Println("Sum is ", sum)
}

এখন আপনি নিজের পছন্দমতো জিনিস যোগ করতে পারেন। ...আপনি যখন my_funcফাংশনটি কল করবেন তার পরে গুরুত্বপূর্ণটি লক্ষ্য করুন ।

চলমান উদাহরণ: http://ideone.com/8htWfx


10

হয় আপনার ফাংশনটি ভ্যারাগস, যাতে আপনি ...হান্টার ম্যাকমিলেন শো হিসাবে স্বীকৃতি সহ একটি টুকরো ব্যবহার করতে পারেন , বা আপনার ফাংশনে একটি নির্দিষ্ট সংখ্যক যুক্তি রয়েছে এবং আপনার কোডটি লেখার সময় আপনি সেগুলি আনপ্যাক করতে পারেন।

আপনি যদি স্থির সংখ্যক তর্ক যুক্তির কার্যক্রমে গতিশীলভাবে এটি করতে চান তবে আপনি প্রতিবিম্বটি ব্যবহার করতে পারেন:

package main
import "fmt"
import "reflect"

func my_func(a, b int) (int) {
    return a + b
}

func main() {
    arr := []int{2,4}
    var args []reflect.Value
    for _, x := range arr {
        args = append(args, reflect.ValueOf(x))
    }
    fun := reflect.ValueOf(my_func)
    result := fun.Call(args)
    sum := result[0].Interface().(int)
    fmt.Println("Sum is ", sum)
}

আমি দেখতে আগ্রহী যে এই বেনমার্কগুলি কীভাবে ভ্যারাগস পদ্ধতির বিরুদ্ধে রয়েছে। আমি ধরে নেব যে এটি কম দক্ষতার সাথে সম্পাদন করবে, তবে আমাকে এটি সন্ধান করতে হবে।
হান্টার ম্যাকমিলেন

@ হুন্টারম্যাকমিলেন আপনি কি পারফরম্যান্স তুলনা সম্পর্কে অন্তর্দৃষ্টি পেয়েছেন?
আকিরস

@ আকরোস সম্ভবত, তবে এটি অনেক আগে ছিল যে আমি ফলাফলগুলি ভুলে গিয়েছি: |
হান্টার ম্যাকমিলেন

Lol ঠিক আছে, কোনও বড় বিষয় নয়: আমি মনে করি এটি যাইহোক ধীর হয়, সম্ভবত আমি নিজে কিছু পরীক্ষা চালাব। ধন্যবাদ
AkiRoss

0

https://play.golang.org/p/2nN6kjHXIsd

আমার কিছু মানচিত্র [স্ট্রিং] স্ট্রিং থেকে কিছু প্রায় একক উদ্ধৃতি এবং কিছু ছাড়াও আনপ্যাক করার কারণ ছিল। এখানে এটির জন্য যুক্তি দেওয়া এবং প্লে লিঙ্ক আপের উপরে সম্পূর্ণ কার্যকারী স্নিপেট রয়েছে।

func unpack(a map[string]string) string {

var stmt, val string
var x, y []string
for k, v := range a {
    x = append(x, k)
    y = append(y, "'"+v+"'")
}

stmt = "INSERT INTO tdo.rca_trans_status (" + strings.Join(x, ", ")
val = ") VALUES (" + strings.Join(y, ",") + ");"

return stmt + val}

যা এমএসকিউএল ক্যোয়ারির জন্য পরিষ্কারভাবে উপস্থাপন করে:

INSERT INTO tdo.rca_trans_status (rca_json_body, original_org, md5sum, updated, rca_key) VALUES ('blob','EG','2343453463','2009-11-10 23:00:00','prb-180');

-17

না, ভাষার জন্য এটির জন্য সরাসরি কোনও সমর্থন নেই। পাইথন এবং রুবি পাশাপাশি জাভাস্ক্রিপ্ট আপনি উল্লেখ করছেন; সমস্ত গতিশীল / স্ক্রিপ্টিং ভাষা। গো কোনও গতিময় ভাষার চেয়ে সি এর কাছাকাছি, উদাহরণস্বরূপ C 'প্রয়োগ' কার্যকারিতা গতিশীল ভাষার জন্য কার্যকর, তবে সি বা গোয়ের মতো স্থির ভাষার জন্য অল্প ব্যবহারের জন্য,


@ ব্যবহারকারী 7610 আপনি ভুল বলেছেন are আপনি প্রশ্নের চেয়ে বিভিন্ন ক্ষেত্রে জবাবদিহি করছেন। মূল প্রশ্নে ফাংশন ঘোষণার ক্ষেত্রে কোনও ভ্যারানডিক পরামিতি নেই।
ব্যবহারকারী 2846569

হ্যাঁ, আমি ছিলাম, অনুমান করি। পাইথন / রুবি যা করে তাকে যে প্রতিচ্ছবিযুক্ত কলটি সমর্থন করে তার জন্য সিনট্যাকটিক চিনি হিসাবে ভাবা যেতে পারে ...
ব্যবহারকার 7610
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.