একটি ধ্রুবক অ্যারে ঘোষণা করুন


164

আমি চেষ্টা করেছি:

const ascii = "abcdefghijklmnopqrstuvwxyz"
const letter_goodness []float32  = { .0817,.0149,.0278,.0425,.1270,.0223,.0202, .0609,.0697,.0015,.0077,.0402,.0241,.0675, .0751,.0193,.0009,.0599,.0633,.0906,.0276, .0098,.0236,.0015,.0197,.0007 }
const letter_goodness  = { .0817,.0149,.0278,.0425,.1270,.0223,.0202, .0609,.0697,.0015,.0077,.0402,.0241,.0675, .0751,.0193,.0009,.0599,.0633,.0906,.0276, .0098,.0236,.0015,.0197,.0007 }
const letter_goodness = []float32 { .0817,.0149,.0278,.0425,.1270,.0223,.0202, .0609,.0697,.0015,.0077,.0402,.0241,.0675, .0751,.0193,.0009,.0599,.0633,.0906,.0276, .0098,.0236,.0015,.0197,.0007 }

প্রথমত, ঘোষণা এবং সূচনাটি সূক্ষ্মভাবে কাজ করে তবে দ্বিতীয়, তৃতীয় এবং চতুর্থটি কাজ করে না don't আমি কীভাবে ফ্লোটের কনস্ট অ্যারে ঘোষণা ও প্রারম্ভিক করতে পারি?

উত্তর:


232

একটি অ্যারে প্রকৃতি দ্বারা পরিবর্তনযোগ্য নয়; আপনি এটি ধ্রুবক করতে পারবেন না।

নিকটতম আপনি পেতে পারেন:

var letter_goodness = [...]float32 {.0817, .0149, .0278, .0425, .1270, .0223, .0202, .0609, .0697, .0015, .0077, .0402, .0241, .0675, .0751, .0193, .0009, .0599, .0633, .0906, .0276, .0098, .0236, .0015, .0197, .0007 }

এর [...]পরিবর্তে নোট করুন []: এটি নিশ্চিত করে যে আপনি একটি স্লাইসের পরিবর্তে একটি (স্থির আকার) অ্যারে পাবেন। সুতরাং মানগুলি স্থির নয় তবে আকারটি।


126
কেবল স্পষ্টতার জন্য: [...]Tবাক্য গঠনটি চিনির জন্য [123]T। এটি একটি স্থির আকারের অ্যারে তৈরি করে, তবে সংস্থাপকটি এটিতে কতগুলি উপাদান রয়েছে তা নির্ধারণ করতে দেয়।
জিমট

5
আমার ধারনা ধ্রুব অ্যারেগুলিকে টাইপ সিস্টেমে আপডেটের প্রয়োজন হবে। অন্যথায় যদি আপনি কোনও ফাংশন সংজ্ঞায়িত করেন তবে আপনি f(xs [5]int)জানতে পারবেন না যে পাস করা অ্যারেটি ধ্রুবক বা পরিবর্তনযোগ্য।
টমাস আহলে

tks, আমি যখন স্ট্রিং করার চেষ্টা করি তখন আমার সমস্যা হয় J যোগ দিন cannot use constants.FilesRequired (type [4]string) as type []string in argument to strings.Join
এডি হার্নান্দেজ

স্লাইস সমাধানের জন্য ধন্যবাদ। সন্দেহ: একটি অ্যারে নিজেই অপরিবর্তনীয়, তাই না? একবার অ্যারে তৈরি হয়ে গেলে কেউ উপাদান যুক্ত বা অপসারণ করতে পারে না, না? আমি যাইহোক, অ্যারে উপাদানগুলি সম্পাদনা করতে পারি।
কিংবদন্তি

@ লেজেন্ডস 2 কে আপনি অ্যারের আকার পরিবর্তন করতে পারবেন না, তবে আপনি এটির স্লটে অন্যান্য মান রাখতে পারেন।
সাগুরেট অস্বীকার

63

কার্যকর গো থেকে :

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

স্লাইস এবং অ্যারে সর্বদা রানটাইমের সময় মূল্যায়ন করা হয়:

var TestSlice = []float32 {.03, .02}
var TestArray = [2]float32 {.03, .02}
var TestArray2 = [...]float32 {.03, .02}

[...]সংকলককে অ্যারের দৈর্ঘ্য নির্ধারণ করতে বলে। স্লাইসগুলি অ্যারেগুলিকে আবৃত করে এবং বেশিরভাগ ক্ষেত্রে এর সাথে কাজ করা সহজ। ধ্রুবকগুলি ব্যবহার না করে কেবলমাত্র ছোট অক্ষরের প্রথম অক্ষরটি ব্যবহার করে অন্যান্য প্যাকেজগুলিতে ভেরিয়েবলগুলি অ্যাক্সেসযোগ্য করে তুলুন:

var ThisIsPublic = [2]float32 {.03, .02}
var thisIsPrivate = [2]float32 {.03, .02}

thisIsPrivateএটি কেবলমাত্র প্যাকেজে উপলব্ধ এটি সংজ্ঞায়িত। আপনার যদি বাইরে থেকে পঠনের অ্যাক্সেসের প্রয়োজন হয় তবে আপনি একটি সহজ গিটার ফাংশন লিখতে পারেন ( গোলটগুলিতে গেটার্স দেখুন )।


12

গো-এ অ্যারে ধ্রুবক বলে কোনও জিনিস নেই।

গো ভাষার স্পেসিফিকেশন থেকে উদ্ধৃতি : ধ্রুবক :

আছে বুলিয়ান ধ্রুবক , জাদুঅক্ষর ধ্রুবক , পূর্ণসংখ্যা ধ্রুবক , ফ্লোটিং পয়েন্ট ধ্রুবক , জটিল ধ্রুবক , এবং স্ট্রিং ধ্রুবক । রুন, পূর্ণসংখ্যা, ভাসমান-পয়েন্ট এবং জটিল ধ্রুবককে সম্মিলিতভাবে সংখ্যার ধ্রুবক বলা হয় ।

একটি ধ্রুবক এক্সপ্রেশন (যা একটি ধ্রুবককে আরম্ভ করার জন্য ব্যবহৃত হয়) কেবল ধ্রুব অপারেশন থাকতে পারে এবং সংকলন সময়ে মূল্যায়ন করা হয়।

স্পেসিফিকেশন বিভিন্ন ধরণের ধ্রুবককে তালিকাভুক্ত করে। নোট করুন যে আপনি অন্তর্নিহিত ধরণের হিসাবে অনুমোদিত ধরণেরগুলির মধ্যে একটির ধরণের ধ্রুবক প্রকাশের সাথে ধ্রুবকগুলি তৈরি এবং সূচনা করতে পারেন । উদাহরণস্বরূপ এটি বৈধ:

func main() {
    type Myint int
    const i1 Myint = 1
    const i2 = Myint(2)
    fmt.Printf("%T %v\n", i1, i1)
    fmt.Printf("%T %v\n", i2, i2)
}

আউটপুট ( গো খেলার মাঠে এটি চেষ্টা করুন ):

main.Myint 1
main.Myint 2

আপনার যদি অ্যারের প্রয়োজন হয় তবে এটি কেবল পরিবর্তনশীল হতে পারে তবে ধ্রুবক নয়।

আমি ধ্রুবক সম্পর্কে এই মহান ব্লগ নিবন্ধ সুপারিশ: ধ্রুবক


তাহলে ধ্রুব আকারের ধারক প্রয়োজন হলে কী করবেন?

@ অ্যাটমিক_এলার্ম আপনি দয়া করে বিস্তারিত বলতে পারেন?
আইজজা

গোলং অ্যানালগ সি-অ্যারে রয়েছে কিনা তা বিদ্যমান?

@ অ্যাটমিক_এলার্ম হ্যাঁ, গোতে অ্যারেগুলির উপস্থিতি খুব বেশি, এগুলি কেবল ধ্রুবক প্রকাশ নয়, রানটাইমের সময় তাদের মূল্যায়ন করা হয়। সুতরাং একটি ধ্রুবক অ্যারে ধরণের হতে পারে না, তবে একটি পরিবর্তনশীল পারে। উদাহরণস্বরূপ:var arr = [2]int{2, 3}
আইকজা

3

অন্যরা যেমন উল্লেখ করেছে, এর জন্য কোনও সরকারী গো কন্সট্রাকশন নেই। নিকটতম আমি কল্পনা করতে পারি এমন একটি ফাংশন হবে যা একটি ফালি দেয়। এইভাবে, আপনি গ্যারান্টি দিতে পারেন যে কেউই মূল স্লাইসের উপাদানগুলি হেরফের করবে না (এটি অ্যারেতে "হার্ড-কোডড" রয়েছে)।

আমি আপনার স্লাইসটি এটির জন্য ছোট করে রেখেছি ... আরও ছোট ...:

func GetLetterGoodness() []float32 {
    return [...]float32 { .0817,.0149,.0278,.0425,.1270,.0223 }
}

4
এটি সবচেয়ে ভাল যাওয়ার মতো শোনাচ্ছে, তবে ফান্ট রিটার্নের ধরণটি মেলে না। cannot use [6]string literal (type [6]string) as type []string in return argumentতাইreturn []float32 { ... }
রিমিক্স

@ থেরেমিক্স তিনটি সম্ভাব্য ফিক্স: (1) সরান ...যাতে অ্যারে আক্ষরিক পরিবর্তে একটি স্লাইস লিটারাল ঘোষণা করতে। (২) রিটার্নের ধরনটি এতে পরিবর্তন করুন [6]float32। (3) একটি অ্যারের পরিবর্তনশীল অভিব্যক্তি দায়িত্ব অর্পণ করা, a := [...]float32 { (etc.) }এবং সমস্ত উপাদানের ফালি ফিরে return a[:]। (অ্যারের লিটারেলগুলি সম্বোধনযোগ্য নয়, কেন আমি তা পরিষ্কার করছি না
ডেভিড মোলস

আপনার গ্যারান্টি কী বলতে চাইছে তা আমি নিশ্চিত নই। দেখে মনে হচ্ছে আপনি নিজের কোডে এমন কিছু সমাধান করার চেষ্টা করছেন যা সম্ভবত (ইউনিট) পরীক্ষার মাধ্যমে আরও ভাল সমাধান করা হয়েছে।
ডায়নম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.