রেল অন রেলগুলিতে @ ভেরিয়েবলগুলি


294

মধ্যে পার্থক্য কি @titleএবং title? যেহেতু উভয়ই পরিবর্তনশীল নাম হতে পারে। এছাড়াও, আমি কোন ধরণের ভেরিয়েবল ব্যবহার করা উচিত তা আমি কীভাবে সিদ্ধান্ত নেব? সাথে @নাকি?


আমি এই টিউটোরিয়ালটি এই সমস্ত ব্যাখ্যা করার জন্য বেশ ঝরঝরে বলব: techotopia.com/index.php/…
হেরেন

উত্তর:


426

titleএকটি স্থানীয় পরিবর্তনশীল। এগুলি কেবল এটির সুযোগের মধ্যে বিদ্যমান (বর্তমান ব্লক)

@title একটি উদাহরণ পরিবর্তনশীল - এবং শ্রেণীর মধ্যে সমস্ত পদ্ধতির জন্য উপলব্ধ is

আপনি এখানে আরও পড়তে পারেন: http://strugglingwithruby.blogspot.dk/2010/03/variables.html

রুবেলে অন রুবেল - আপনার নিয়ামকটিতে আপনার ভেরিয়েবলগুলি উদাহরণ ভেরিয়েবল হিসাবে ঘোষণা করে ( @title) সেগুলি আপনার দর্শন উপলব্ধ করে।


4
উত্তরের জন্য ধন্যবাদ, ফলো-আপ প্রশ্ন আছে ... আমি যে ক্লাসে কাজ করছি তার মধ্যে সদস্য ভেরিয়েবলটি প্রথমে @options = {... like এর মতো তৈরি করা হয়} এর পরে, শ্রেণীর মধ্যে পদ্ধতিগুলি অ্যাক্সেস করে এবং সেই ভেরিয়েবলের সাথে ফাংশন কল দেয় যেন এটি স্থানীয় (যেমন "অপশনগুলি: নিমজ্জন ()")। এটি কি কেবল খারাপ ফর্ম? সেখানে কি আরও কিছু সিনট্যাকটিক ম্যাজিক চলছে? (যেমন ভেরিয়েবলের নীরব ডুপ বানানো, বা এটি 'কনস্ট' তৈরি করা যাতে এটি পরিবর্তন করা যায় না, ইত্যাদি)? আমি একটি সি / সি ++ এবং জাভা দৃষ্টিভঙ্গি থেকে আসছি, এবং সত্যিই অস্পষ্ট এবং alচ্ছিক সিনট্যাক্স আমাকে বাদাম চালাচ্ছে!
ড্যান ডিভাইন

আপনার ক্লাসে কি একটি ড্যানডেভাইন একই নামের সাথে সংজ্ঞা দেওয়া হয়েছে? আতর_একসেসর সিনট্যাকটিক চিনি যা আপনার জন্য একটি গেটর-সেটার তৈরি করে। আপনি যদি @ চিহ্ন ছাড়া মান পাচ্ছেন তবে কোডটি ভেরিয়েবলটি গ্রহণ করবে কারণ এটি গ্রাহককে কল করছে। নোট করুন এটি অন্যভাবে কাজ করে না, আপনি যদি ভেরি সেট করে থাকেন তবে আপনাকে স্পষ্টভাবে @ প্রতীক ব্যবহার করতে হবে অন্যথায় আপনি কেবল একটি স্থানীয় ভেরি সেট করবেন। এটা কি ভাল স্টাইল? বলা কঠিন. গেটর ওভারড্রিন হয়ে যাওয়ার ক্ষেত্রে আমি আমার পদ্ধতিগুলিতে গেটর সিনট্যাক্স ব্যবহার করতে পছন্দ করি - আমি সেই এনক্যাপসুলেশনকে সম্মান করতে চাই, এমনকি ক্লাসের মধ্যেই। YMMV
Msencenb

30

@titleযখন আপনি চান যে আপনার ভেরিয়েবলটি আপনার দর্শনে উপলভ্য থাকে তখন আপনার নিয়ন্ত্রণকারীগুলিতে ব্যবহার করুন ।

ব্যাখ্যাটি হ'ল এটি @titleএকটি দৃষ্টান্ত পরিবর্তনশীল এবং titleএটি একটি স্থানীয় ভেরিয়েবল এবং রেলগুলি নিয়ামকগুলি থেকে দর্শনগুলির জন্য উপলব্ধ পরিবর্তনশীল করে makes এটি ঘটে কারণ টেমপ্লেট কোড (এরব, এইচএমএল, ইত্যাদি) বর্তমান নিয়ামকের উদাহরণের আওতায় কার্যকর করা হয়।


এর জন্য ধন্যবাদ! এটিই একমাত্র উত্তর যা ব্যাখ্যা করে যে কন্ট্রোলার ক্লাসে সংজ্ঞায়িত @ ভেরিয়েবলগুলি ভিউগুলিতে কোড দ্বারা কেনা যেতে পারে।
অ্যালেক্সস

25

পার্থক্যটি ভেরিয়েবলের সুযোগে in @ রূপান্তরটি শ্রেণীর উদাহরণের সমস্ত পদ্ধতিতে উপলব্ধ।

সংক্ষিপ্ত উত্তর, আপনি যদি নিয়ামকের মধ্যে থাকেন এবং আপনার যদি ভেরিয়েবলটি দর্শনের জন্য উপলব্ধ করতে হয় তবে তা ব্যবহার করুন @variable

দীর্ঘতর উত্তরের জন্য এটি ব্যবহার করে দেখুন: http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_classes.html


14

@variableএসকে রুবিতে ইনস্ট্যান্স ভেরিয়েবল বলা হয়। যার অর্থ আপনি ক্লাসের মধ্যে যে কোনও পদ্ধতিতে এই পরিবর্তনগুলি অ্যাক্সেস করতে পারবেন। [ক্লাসে সমস্ত পদ্ধতি জুড়ে]

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

ইনস্ট্যান্স ভেরিয়েবলের উদাহরণ:

class Customer
  def initialize(id, name, addr)
    @cust_id = id
    @cust_name = name
    @cust_addr = addr
  end

  def display_details
    puts "Customer id #{@cust_id}"
    puts "Customer name #{@cust_name}"
    puts "Customer address #{@cust_addr}"
  end
end

উপরের উদাহরণে @cust_id, @cust_name, @cust_addrবর্গ মধ্যে আরেকটি পদ্ধতিতে ব্যবহার করা হয়। তবে একই জিনিস স্থানীয় ভেরিয়েবলের সাথে অ্যাক্সেসযোগ্য হবে না।


9

ভেরিয়েবল স্কোপ কি সম্পর্কে একটি টিউটোরিয়াল ? কিছু বিশদ বেশ ভালভাবে উপস্থাপন করে, কেবল এখানে সম্পর্কিতটি বন্ধ করুন।


+------------------+----------------------+
| Name Begins With |    Variable Scope    |
+------------------+----------------------+
| $                | A global variable    |
| @                | An instance variable |
| [a-z] or _       | A local variable     |
| [A-Z]            | A constant           |
| @@               | A class variable     |
+------------------+----------------------+

4

একটি স্থানীয় ভেরিয়েবল কেবল এটির আরম্ভের ব্লকের মধ্যে থেকে অ্যাক্সেসযোগ্য। এছাড়াও স্থানীয় ভেরিয়েবলটি ছোট হাতের অক্ষর (এজে) বা আন্ডারস্কোর (_) দিয়ে শুরু হয়।

এবং ইনস্ট্যান্স ভেরিয়েবল একটি উদাহরণ selfএবং এর সাথে শুরু হয় একটি @উদাহরণ ভেরিয়েবলও বস্তুর সাথে সম্পর্কিত। ইনস্ট্যান্স ভেরিয়েবলগুলি হ'ল আপনি যেমন .sendইত্যাদি পদ্ধতি প্রয়োগ করেন

উদাহরণ:

@user = User.all

@userউদাহরণ হিসেবে বলা যায় পরিবর্তনশীল

এবং ইউনিটায়ালাইজড ইনস্ট্যান্স ভেরিয়েবলের একটি মান রয়েছে Nil


সুতরাং এটি কীভাবে @titleএবং এর মধ্যে পার্থক্য ব্যাখ্যা করবে title?
রিচার্ড পেক

@ শিরোনামের মতো উদাহরণের সাথে আপনি এটির বিভিন্ন পদ্ধতি সম্পাদন করতে পারেন, যেখানে স্থানীয় ভেরিয়েবল আপনি করেন না
জো হিলটন

1
সুতরাং কিভাবে যে আসলে প্রশ্ন ঠিক করে? দেখে মনে হচ্ছে আপনি কিছু টিউটোরিয়াল উদ্ধৃত করছেন। ওপি তার ব্যবহার করা উচিত কিনা তা জানতে চায় @titleবাtitle
রিচার্ড পেক

সুতরাং তারা কোনও পদ্ধতি সম্পাদন করতে চাইলে তাদের উদাহরণ ভেরিয়েবল ব্যবহার করা উচিত I Def নতুন বা ডিফ তৈরি ইত্যাদি
জো হিলটন

3
কিছুই আপনাকে ব্যবহারকারীর = ব্যবহারকারীর ব্যবহার থেকে বিরত রাখে না all সমস্ত ব্যবহারকারীর উপর পদ্ধতিগুলি সঞ্চালন করে তবে এটি মূল বিষয় নয়।
Jaro

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