স্থির মানচিত্র কীভাবে ঘোষণা করবেন declare


126

আমি গোতে ধ্রুবক হিসাবে ঘোষণা করার চেষ্টা করছি তবে এটি একটি ত্রুটি ছুঁড়ে দিচ্ছে। গো কেউ স্থির ঘোষণার বাক্য গঠনে আমাকে দয়া করে সহায়তা করতে পারে?

এটি আমার কোড:

const romanNumeralDict map[int]string = {
  1000: "M",
  900 : "CM",
  500 : "D",
  400 : "CD",
  100 : "C",
  90  : "XC",
  50  : "L",
  40  : "XL",
  10  : "X",
  9   : "IX",
  5   : "V",
  4   : "IV",
  1   : "I",
}

এটি ত্রুটি

# command-line-arguments
./Roman_Numerals.go:9: syntax error: unexpected {

উত্তর:


154

আপনার সিনট্যাক্সটি ভুল। আক্ষরিক মানচিত্র তৈরি করতে (ছদ্ম-ধ্রুবক হিসাবে), আপনি এটি করতে পারেন:

var romanNumeralDict = map[int]string{
  1000: "M",
  900 : "CM",
  500 : "D",
  400 : "CD",
  100 : "C",
  90  : "XC",
  50  : "L",
  40  : "XL",
  10  : "X",
  9   : "IX",
  5   : "V",
  4   : "IV",
  1   : "I",
}

এর ভিতরে funcআপনি এটির মতো ঘোষণা করতে পারেন:

romanNumeralDict := map[int]string{
...

এবং গো-এ ধ্রুবক মানচিত্রের মতো কোনও জিনিস নেই। আরও তথ্য এখানে পাওয়া যাবে

এটি খেলার খেলার মাঠে চেষ্টা করে দেখুন।


1
এটি non-declaration statement outside function bodyআসলে একটি সংকলন সময়ে ছুড়ে দেয় । কিভাবে?
আলেডিয়াফেরিয়া

@ আলেসান্দ্রো ডাইফেরিয়া আমি এই জাতীয় ত্রুটি পাই না। কিভাবে আপনি এটি ব্যবহার করা হয়?
স্কিগুইয়

7
@ আলেসান্দ্রোডিয়াফেরিয়া var romanNumeralDict map[int]string = map[int]string{...}এ জাতীয় ক্ষেত্রে চেষ্টা করুন ।
বি-স্ক্যান

4
@ediaferia যদি :=কোনও ফাংশনের বাইরে ব্যবহার করে থাকেন তবে আপনি সেই ত্রুটিটি পেয়েছেন ।
জেফ্রি মার্টিনেজ

1
"সিউডো-ধ্রুবক" কী?
গ্যারেট

23

আপনি বিভিন্ন উপায়ে ধ্রুবক তৈরি করতে পারেন:

const myString = "hello"
const pi = 3.14 // untyped constant
const life int = 42 // typed constant (can use only with ints)

আপনি একটি এনাম ধ্রুবক তৈরি করতে পারেন:

const ( 
   First = 1
   Second = 2
   Third = 4
)

আপনি মানচিত্র, অ্যারেগুলির স্থিরতা তৈরি করতে পারবেন না এবং এটি কার্যকর গোয়ে লেখা হয়েছে :

ধ্রুবকগুলিতে যান কেবলমাত্র — ধ্রুবক। এগুলি সংকলনের সময়ে তৈরি করা হয়, এমনকি ফাংশনে স্থানীয় হিসাবে সংজ্ঞায়িত হয়েও কেবল সংখ্যা, অক্ষর (রুনস), স্ট্রিং বা বুলিয়ান হতে পারে। সংকলন-সময় সীমাবদ্ধতার কারণে, সেগুলি সংজ্ঞায়িত করে যে সংজ্ঞাগুলি অবশ্যই সংবিধানের প্রকাশ হতে হবে, সংকলক দ্বারা মূল্যায়নযোগ্য। উদাহরণস্বরূপ, 1 << 3 একটি ধ্রুবক অভিব্যক্তি, যখন গণিত.সিন (গণিত.পি / 4) গণিতের জন্য ফাংশন কল করার কারণে নয় inসিন রান সময় হওয়ার দরকার happen


সুতরাং এটি আরও একটি সি ++ 11 কনস্টেক্সপ্রের মতো ... কেন গণিত.সিন একটি কনটেক্সপ্রপ ফাংশন নয়, তাহলে!
ফ্রান্সেস্কো দন্ডি

আপনার বক্তব্যগুলি সঠিক, তবে প্রশ্নটি এমন একটি মানচিত্র তৈরি সম্পর্কে ছিল যা ধ্রুবক।
jzer7

5
@ জজার 7 আপনি কি আমাকে ব্যাখ্যা করতে পারেন কেন আমার উত্তরটি অপ্রাসঙ্গিক? তিনি কীভাবে কিছু তৈরি করবেন জানতে চাইলে আমি তাকে বলেছিলাম যে এটি সম্ভব নয়। কী সম্ভব তা ব্যাখ্যা করে এবং ডক্স থেকে একটি প্রশংসা প্রদান করলেন কেন তিনি যা চান তা করা ঠিক কেন সম্ভব নয়।
সালভাদোর ডালি

12

আপনি একটি মানচিত্র একটি ক্লোজার সহ অনুকরণ করতে পারেন:

package main

import (
    "fmt"
)

// http://stackoverflow.com/a/27457144/10278

func romanNumeralDict() func(int) string {
    // innerMap is captured in the closure returned below
    innerMap := map[int]string{
        1000: "M",
        900:  "CM",
        500:  "D",
        400:  "CD",
        100:  "C",
        90:   "XC",
        50:   "L",
        40:   "XL",
        10:   "X",
        9:    "IX",
        5:    "V",
        4:    "IV",
        1:    "I",
    }

    return func(key int) string {
        return innerMap[key]
    }
}

func main() {
    fmt.Println(romanNumeralDict()(10))
    fmt.Println(romanNumeralDict()(100))

    dict := romanNumeralDict()
    fmt.Println(dict(400))
}

এটি খেলার খেলার মাঠে চেষ্টা করুন


4
(টেস্টমোস্টসোল্ডার সুপারিশকারী?)
টোভটওয়াতো

1
এটি আসলে একটি সম্ভাব্য সমাধান। তবে লেখক যেহেতু কোনও কিছুই ব্যাখ্যা করেন নি (এবং সবকিছুকে একটি অদ্ভুত-নামক পরীক্ষার মামলার ভিতরে রেখেছেন), উত্তরটি ভুল বলে মনে হচ্ছে। যুক্তিটি হ'ল: (1) একটি বেনামি ফাংশন তৈরি করুন (২) বেনামি ফাংশনটি map(3) encapsulates বেনামে ফাংশন "এমন একটি ফাংশন প্রদান করে যা কোনও int গ্রহণ করে এবং একটি স্ট্রিং প্রদান করে" (4) ফিরে আসা ফাংশনটি int -> স্ট্রিংটি করে ম্যাপিং map(5) অবিলম্বে বেনামে ফাংশনটি সম্পাদন করুন এবং ফিরিয়ে ফাংশনটি একটি ভেরিয়েবলের জন্য বরাদ্দ করুন। এই পরিবর্তনশীলটি কোনও ফাংশনের মতো ব্যবহার করা যেতে পারে এবং প্রভাবটি মানচিত্রের মতো।
সিউ চিং পং-আসুকা কেনজি-

3

এবং উপরে সিউ চিং পং-এর পরামর্শ অনুসারে আসুকা কেনজি এমন ফাংশনটি নিয়েছেন যা আমার মতে আরও বোধগম্য হয় এবং আপনাকে চারপাশের ফাংশন মোড়ক ছাড়াই মানচিত্রের প্রকারের সুবিধার্থে ছেড়ে দেয়:

   // romanNumeralDict returns map[int]string dictionary, since the return
       // value is always the same it gives the pseudo-constant output, which
       // can be referred to in the same map-alike fashion.
       var romanNumeralDict = func() map[int]string { return map[int]string {
            1000: "M",
            900:  "CM",
            500:  "D",
            400:  "CD",
            100:  "C",
            90:   "XC",
            50:   "L",
            40:   "XL",
            10:   "X",
            9:    "IX",
            5:    "V",
            4:    "IV",
            1:    "I",
          }
        }

        func printRoman(key int) {
          fmt.Println(romanNumeralDict()[key])
        }

        func printKeyN(key, n int) {
          fmt.Println(strings.Repeat(romanNumeralDict()[key], n))
        }

        func main() {
          printRoman(1000)
          printRoman(50)
          printKeyN(10, 3)
        }

Play.golang.org এ এটি চেষ্টা করুন।


-2

ধীরে ধীরে সম্ভব হিসাবে একটি মানচিত্র সংজ্ঞায়িত উপরে বর্ণিত হিসাবে। তবে আপনি একটি গ্লোবাল ভেরিয়েবল ঘোষণা করতে পারেন যা একটি স্ট্রাক্ট যা মানচিত্র রয়েছে।

প্রারম্ভিকরণটি দেখতে এরকম হবে:

var romanNumeralDict = struct {
    m map[int]string
}{m: map[int]string {
    1000: "M",
    900: "CM",
    //YOUR VALUES HERE
}}

func main() {
    d := 1000
    fmt.Printf("Value of Key (%d): %s", d, romanNumeralDict.m[1000])
}

3
কেন কেবল মানচিত্রটিকে বৈশ্বিক পরিবর্তনশীল করা যায় না? কেন স্ট্রাক্ট এ এটি মোড়ানো?
হারিকেন হ্যামিল্টন

3
এটি মানচিত্রটিকে অবিচ্ছিন্ন করে তোলে না, আপনি এখনও করতে পারেনromanNumeralDict.m[1000] = "New value"
21
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.