মুদ্রণ এবং পুটের মধ্যে পার্থক্য কী?


261

উদাহরণস্বরূপ কোডের এই লাইনে আমি লিখেছি printএবংputs বিভিন্ন ফলাফল উত্পন্ন ।

1.upto(1000).each { |i| print i if i % 2 == 0 }

উত্তর:


377

puts ইতিমধ্যে একটি না থাকলে প্রতিটি যুক্তির শেষে একটি নতুন লাইন যুক্ত করে।

print একটি নতুন লাইন যুক্ত করে না।


উদাহরণ স্বরূপ:

puts [[1,2,3], [4,5,nil]] ফিরে আসবে:

1
2
3
4
5

যেখানে print [[1,2,3], [4,5,nil]] ফিরে আসবে:

[[1,2,3], [4,5, শূন্য]]
নোট মান আউটপুট না রাখে কিভাবে প্রিন্ট করে দেখুন।

88
আসলে, প্রতিটি যুক্তির পরে একটি নতুন লাইন। এটি একটি মূল বিষয় এবং রুবি ডক্স থেকে পরিষ্কার নয় (যেহেতু উদাহরণটিতে কেবল 1 টি যুক্তি রয়েছে)।
cdunn2001

3
আরেকটি জিনিস আছে ... অ্যারে শ্রেণি প্রসারিত করুন এবং to_s পদ্ধতিতে ওভাররাইড করুন। মুদ্রণ করার সময় আপনার নতুন শ্রেণীর কোনও সামগ্রীর জন্য নতুন টো_স ব্যবহার করবেন না
kapv89

1
আরবি 0.9.5 পুট ("a") এবং পুটস ("a \ n") ব্যবহার করে REPL তে ঠিক একই আউটপুট থাকে।
মার্কাস জুনিয়াস ব্রুটাস

@ kapv89 এটি সত্য নয়: আমি চেষ্টা করেছি এবং উভয়ই টু_স পদ্ধতি ব্যবহার করে মুদ্রণ করেছি। কেবল পি এটি ব্যবহার করে না।
কলিমার্কো 26'14

6
@ ফ্রাঙ্কার, এটি এখনও কেবল একটি যুক্তি। সংকলক সংলগ্ন স্ট্রিংগুলি সম্মিলন করে।
cdunn2001

61

আপনি যদি অ্যারে প্রদর্শন করছেন তবে একটি বড় পার্থক্য are বিশেষত নীল নীল উদাহরণ স্বরূপ:

print [nil, 1, 2]

দেয়

[nil, 1, 2]

কিন্তু

puts [nil, 1, 2]

দেয়

1
2

দ্রষ্টব্য, কোনও শূন্য আইটেম প্রদর্শিত হচ্ছে না (কেবল একটি ফাঁকা রেখা) এবং প্রতিটি আইটেম আলাদা লাইনে।


1
আমি আজ এটি লক্ষ্য করেছি, যা আমাকে এখানে এনেছে। আমি এই চিন্তা ভাবনা জানতে চাই। এটির মতো অ্যারে পরিচালনা করার জন্য এটি বিশেষ ক্ষেত্রে বলে মনে হচ্ছে। যুক্তি কী ছিল তা ভাবছেন ... এটি কি অন্য ভাষার সাথে সাদৃশ্যপূর্ণ?
ড্যান ব্যারন

এটি পুঙ্খানুপুঙ্খভাবে নতুন লাইনের সাথে আউটপুট দেবে তাই এটি বোঝা যায়, সুতরাং আপনি এটি অ্যারেতে পুনরাবৃত্তি হওয়া এবং প্রতিটি লাইনে কল রাখার কথা ভাবতে পারেন ... তবে এটি বিজোড়, তবে এটি আউটপুট দেয় নাnil
মুরস

42

printআউটপুট প্রতিটি যুক্তি, দ্বারা অনুসরণ $,, এর $stdout, দ্বারা অনুসরণ $\। এটি সমানargs.join($,) + $\

putsউভয় $,এবং $\"\ n" তে সেট করে এবং তারপরে একই জিনিসটি করে print। মূল তফাতটি হ'ল প্রতিটি আর্গুমেন্টের সাথে একটি নতুন লাইন puts

আপনি ব্যবহারকারী-বান্ধব নামেরrequire 'english' সাথে এই গ্লোবাল ভেরিয়েবলগুলি অ্যাক্সেস করতে পারেন ।


উপর চমৎকার ডগা englishliberal এর সংক্ষিপ্ত রূপ
lacostenycoder

18

এপিআই ডক্স কিছু ভাল ইঙ্গিত দেয়:

print() → nil

print(obj, ...) → nil

প্রদত্ত বস্তু (গুলি) এতে লিখে দেয় iOS । রিটার্নস nil

স্ট্রিমটি অবশ্যই লেখার জন্য খুলতে হবে। প্রতিটি প্রদত্ত বস্তু যা স্ট্রিং নয় এটি কল করে রূপান্তরিত হবেto_s পদ্ধতিতে । যখন আর্গুমেন্ট ছাড়াই ডাকা হয় তখন এর সামগ্রীগুলি মুদ্রণ করে $_

যদি আউটপুট ক্ষেত্র বিভাজক ( $,) না হয় তবে nilএটি বস্তুর মধ্যে সন্নিবেশ করা হয়। যদি আউটপুট রেকর্ড বিভাজক ($\ ) না হয় nil, তবে এটি আউটপুটে যুক্ত হয়।

...

puts(obj, ...) → nil

দেওয়া বস্তু (গুলি) লিখেছেন iOS । ইতিমধ্যে একটি নতুন লাইন ক্রম দিয়ে শেষ হয় না যে কোনও পরে একটি নতুন লাইন লিখেছেন। রিটার্নস nil

স্ট্রিমটি অবশ্যই লেখার জন্য খুলতে হবে। যদি অ্যারে আর্গুমেন্টের সাথে ডাকা হয়, প্রতিটি উপাদানকে একটি নতুন লাইনে লিখুন। প্রতিটি প্রদত্ত বস্তু যা স্ট্রিং বা অ্যারে নয় এটি কল করে রূপান্তরিত হবেto_s পদ্ধতিটি । যদি আর্গুমেন্ট ছাড়াই ডাকা হয় তবে একটি নতুন লাইনের আউটপুট দেয়।

উপরে বর্ণিত পয়েন্টগুলি নিয়ে সামান্য পরীক্ষা-নিরীক্ষা করলে পার্থক্যগুলি মনে হয়:

  • একাধিক যুক্তি দিয়ে ডাকা হয়, printতাদেরকে 'আউটপুট ফিল্ড বিভাজক' দ্বারা পৃথক করে $,(যা কোনও কিছুরই ক্ষেত্রে ডিফল্ট হয়) যখন putsসেগুলি নিউলাইন দ্বারা আলাদা করে। putsচূড়ান্ত যুক্তির পরেও একটি নতুন লাইন রাখে, যখন printতা হয় না।

    2.1.3 :001 > print 'hello', 'world'
    helloworld => nil 
    2.1.3 :002 > puts 'hello', 'world'
    hello
    world
     => nil
    2.1.3 :003 > $, = 'fanodd'
     => "fanodd" 
    2.1.3 :004 > print 'hello', 'world'
    hellofanoddworld => nil 
    2.1.3 :005 > puts 'hello', 'world'
    hello
    world
     => nil
  • putsস্বয়ংক্রিয়ভাবে অ্যারেগুলি আনপ্যাক করে, যখন এটি printকরে না:

    2.1.3: 001> মুদ্রণ [1, [2, 3]], [4]
    [1, [2, 3]] [4] => শূন্য 
    2.1.3: 002> [1, [2, 3]], [4] রাখে
    1
    2
    3
    4
     => শূন্য
  • printকোনও আর্গুমেন্ট প্রিন্ট ছাড়া $_(শেষ পঠিত জিনিসটি gets), যখন putsএকটি নতুন লাইন প্রিন্ট করে:

    2.1.3 :001 > gets
    hello world
     => "hello world\n" 
    2.1.3 :002 > puts
    
     => nil 
    2.1.3 :003 > print
    hello world
     => nil
  • printআউটপুট রেকর্ড বিভাজক লিখুন $\যা কিছু মুদ্রণের পরে, যখন putsএই পরিবর্তনশীলটিকে উপেক্ষা করে:

    mark@lunchbox:~$ irb
    2.1.3 :001 > $\ = 'MOOOOOOO!'
     => "MOOOOOOO!" 
    2.1.3 :002 > puts "Oink! Baa! Cluck! "
    Oink! Baa! Cluck! 
     => nil 
    2.1.3 :003 > print "Oink! Baa! Cluck! "
    Oink! Baa! Cluck! MOOOOOOO! => nil

4

putsto_sপ্রতিটি আর্গুমেন্টের কল করুন এবং প্রতিটি স্ট্রিংয়ে একটি নতুন লাইন যুক্ত করুন, যদি এটি নতুন লাইনের সাথে শেষ না হয়। printপ্রতিটি আর্গুমেন্টকে কেবল তাদের কল করে আউটপুট করুন to_s

উদাহরণস্বরূপ puts "one two": one two

{নতুন লাইন}

puts "one two\n": one two

line নতুন লাইন} # পুটগুলি ফলাফলটিতে একটি নতুন লাইন যুক্ত করবে না, যেহেতু স্ট্রিংটি একটি নতুন লাইনের সাথে শেষ হয়

print "one two": one two

print "one two\n": one two

{নতুন লাইন}

এবং আউটপুট দেওয়ার আরও একটি উপায় রয়েছে: p

প্রতিটি বস্তুর জন্য, সরাসরি obj.inspect লিখে প্রোগ্রামের স্ট্যান্ডার্ড আউটপুটে একটি নতুন লাইন পরে।

এটি ডিবাগিং বার্তাকে আউটপুট দিতে সহায়ক। p "aa\n\t":aa\n\t


-1

আপনি যদি স্ট্রিং ব্যবহার করে অ্যারে আউটপুট করতে চান putsতবে আপনি একই ফলাফল পাবেন যা আপনি ব্যবহার করছেন print:

puts "#{[0, 1, nil]}":
[0, 1, nil]

তবে যদি উদ্ধৃত স্ট্রিংটি না দিয়ে থাকে তবে হ্যাঁ। পার্থক্যটি যখন আমরা ব্যবহার করি তখন নতুন লাইনের মধ্যে puts


1
-১ দুটি কারণে। প্রথমত, স্পষ্টতার অভাব: আমি বুঝতে পারি না যে এখানে প্রাথমিক "তবে ..." এটি অনুসরণ করার জন্য কী ইচ্ছা করছে এবং চূড়ান্ত অনুচ্ছেদে "হ্যাঁ" কী জবাব দিচ্ছে তা আমি বুঝতে পারি না। দ্বিতীয়ত, নির্ভুলতার অভাবে: আপনি বলেছেন যে আপনার উদাহরণ কোডের printfপরিবর্তে ব্যবহার করা putsএকই ফল দেবে, তবে বাস্তবে তা হয় না। putsবৈকল্পিক শেষে একটি newline যোগ করার সময় printfনা এক করে, ধরো যদি যেখানে অ্যারের স্ট্রিং মধ্যে ইন্টারপোলেট রয়েছে বলে মনে হচ্ছে। (অগত্যা তাই, যেহেতু স্ট্রাল আক্ষরিক মূল্যায়ন করার সময় অন্তরঙ্গকরণ ঘটে))
মার্ক অ্যামেরি

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