টার্নারি অপারেটর এবং মুদ্রণ


10

নীচে কমান্ড দিয়ে কি ভুল আছে

awk 'BEGIN {a = 5;b=6; (a==b)? print "a==b" : print "a!=b"}'

আউটপুট:

awk: BEGIN {a = 5;b=6; (a==b)? print "a==b" : print "a!=b"}
awk:                           ^ syntax error

উত্তর:


25

অন্যান্য অনেক প্রোগ্রামিং ভাষার মত, awkপ্রকাশ এবং বিবৃতি মধ্যে পার্থক্য। বৃহত্তর দ্বারা, বিবৃতিগুলি এমন ক্রিয়া হয় যা সম্পাদিত হয়, যখন প্রকাশগুলি হ'ল গণনা যা ফলস্বরূপ একটি মান।

awkসি এর সমমনা অংশের মতো ত্রিভূমি অপারেটরটি নিজেই একটি প্রকাশ (বিবৃতি নয়) যা অন্য তিনটি এক্সপ্রেশন হিসাবে প্রত্যাশা করে expr1 ? expr2 : expr3printএকটি বিবৃতি। যেখানে অভিব্যক্তিটির জন্য ডাকা হয়েছিল সেখানে এটি ব্যবহার করা যাবে না, সুতরাং বাক্য গঠন ত্রুটি।

আপনি চেষ্টা করেছেন awk 'BEGIN {a = 5;b=6; print (a==b)? "a==b" : "a!=b"}'?

একটি অভিব্যক্তি যেখানে বলা হয়েছে এমন একটি বিবৃতি ব্যবহার করা কোনও অর্থবোধ করতে পারে না। বিবৃতিগুলি মান দেয় না। সুতরাং আপনার যখন আছে condition ? stmt1 : stmt2, টের্নারি অপারেটর দ্বারা গণনা করা মানটি কী? যদি conditionমিথ্যা হয় stmt2তবে এটির মান হওয়া উচিত তবে এটি কোনও মান নয়, এটি একটি ক্রিয়া।


সেখানে অন্যান্য ভাষায় যেখানে বিবৃতি না প্রত্যাবর্তন মান (রুবি মনে আসে), কিন্তু এই প্রশ্নের জন্য একটি নিখুঁত উত্তর।
গ্লেন জ্যাকম্যান 20

এই স্পষ্টির জন্য ধন্যবাদ, @glennjackman। আমি রুবি জানি না তাই হয়তো আমি জানি না আমি কি বিষয়ে কথা বলছি কিন্তু আমার আপনার মন্তব্য পড়ার প্রথম এই ভেবে যে অনুমান তার মানে রুবি ছিল বিবৃতি ধরনের হয় এক্সপ্রেশন
সেলেদা

হ্যাঁ, আপনি এই অকাজের উদাহরণ ভালো জিনিস করতে পারেন:x = if true; print "yes"; else; print "no"; end
গ্লেন জ্যাকম্যান

আমার ধারণা এটির মতো নির্মাণের সম্ভাবনাও এড়ানো যায় (cond1) ? printf("str1") : printf("str2")? তিনবারীর সূক্ষ্মতা ব্যাখ্যা করার জন্য ধন্যবাদ। সম্পাদনা: প্রকৃতপক্ষে, নিম্নলিখিত কুরুচিপূর্ণ নির্মাণ ব্যবহার করে: str = (cond1) ? sprintf("str1") : sprintf("str2"); printf("%s", str)কাজ করে, তবে এই মুহূর্তে এটি প্রায় কমপ্যাক্ট এবং / অন্য :) ব্যবহার করার জন্য আরও স্পষ্ট
আইসোসেলসওহেল

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