রুবি ২.৩ থেকে রুবি-ওয়ে (টিএম): নিউলাইন এবং সঠিক পরিচয় সহ বহু-লাইন স্ট্রিং সংজ্ঞায়িত করতে স্কুইগ্লি হারডোক ব্যবহার করুন <<~
:
conn.exec <<~EOS
select attr1, attr2, attr3, attr4, attr5, attr6, attr7
from table1, table2, table3, etc, etc, etc, etc, etc
where etc etc etc etc etc etc etc etc etc etc etc etc etc
EOS
# -> "select...\nfrom...\nwhere..."
যথাযথ সনাক্তকরণ যদি উদ্বেগের বিষয় না হয় তবে একক এবং ডাবল উদ্ধৃতিগুলি রুবিতে একাধিক লাইন বিস্তৃত করতে পারে:
conn.exec "select attr1, attr2, attr3, attr4, attr5, attr6, attr7
from table1, table2, table3, etc, etc, etc, etc, etc,
where etc etc etc etc etc etc etc etc etc etc etc etc etc"
# -> "select...\n from...\n where..."
যদি একক বা ডাবল উদ্ধৃতিগুলি জটিল হয় কারণ এর জন্য প্রচুর পালানোর দরকার পড়ে, তবে শতাংশ স্ট্রিং আক্ষরিক স্বরলিপিটি %
সবচেয়ে নমনীয় সমাধান:
conn.exec %(select attr1, attr2, attr3, attr4, attr5, attr6, attr7
from table1, table2, table3, etc, etc, etc, etc, etc
where (ProductLine = 'R' OR ProductLine = "S") AND Country = "...")
# -> "select...\n from...\n where..."
যদি লক্ষ্য হয় যে নিউলাইনগুলি এড়িয়ে চলুন (যা স্কুইগলি হারডোক, কোটস এবং শতাংশ স্ট্রিং আক্ষরিক উভয়ই ঘটায়) তবে সর্বশেষ অ-হোয়াইটস্পেস অক্ষর হিসাবে একটি ব্যাকস্ল্যাশ লাইনটি অবিরত রাখবে এবং রুবি স্ট্রিংগুলিকে পিছনে পিছনে সংহত করতে বাধ্য করবে will (উদ্ধৃত স্ট্রিংয়ের ভিতরে থাকা সেই জায়গাগুলি সন্ধান করুন):
conn.exec 'select attr1, attr2, attr3, attr4, attr5, attr6, attr7 ' \
'from table1, table2, table3, etc, etc, etc, etc, etc, ' \
'where etc etc etc etc etc etc etc etc etc etc etc etc etc'
# -> "select...from...where..."
আপনি যদি রেলগুলি ব্যবহার করেন String.squish
তবে শীর্ষস্থানীয় এবং পিছনের স্থানের স্ট্রিংটি কেটে ফেলবে এবং একটানা সমস্ত টানা সাদা স্থান (নিউলাইনস, ট্যাব এবং সমস্ত) একসাথে ফাঁকা করে দেবে:
conn.exec "select attr1, attr2, attr3, attr4, attr5, attr6, attr7
from table1, table2, table3, etc, etc, etc, etc, etc,
where etc etc etc etc etc etc etc etc etc etc etc etc etc".squish
# -> "select...from...where..."
আরো বিস্তারিত:
রুবি হারডোক সিনট্যাক্স
স্ট্রিংসের কাজের জন্য এখানে নথি নোটেশন কোডে টেক্সট ইনলাইনের দীর্ঘ ব্লকগুলি নির্দিষ্ট করার একটি উপায়। এটি <<
ব্যবহারকারী-সংজ্ঞায়িত স্ট্রিং (স্ট্রিং টার্মিনেটরের সমাপ্তি) এর পরে শুরু হয়। স্ট্রিং টার্মিনেটরের সমাপ্তি একটি লাইনের একেবারে প্রারম্ভিক অবধি পাওয়া না যাওয়া পর্যন্ত নিম্নলিখিত সমস্ত লাইন সংক্ষিপ্ত হয়ে থাকে:
puts <<HEREDOC
Text Text Text Text
Bla Bla
HEREDOC
# -> "Text Text Text Text\nBlaBla"
স্ট্রিং টার্মিনেটরের শেষ অবধি অবাধে নির্বাচন করা যেতে পারে তবে "EOS" (স্ট্রিংয়ের সমাপ্তি) জাতীয় কিছু বা স্ট্রিংয়ের ডোমেনের সাথে মেলে এমন কিছু ব্যবহার করা যেমন "এসকিউএল" ব্যবহার করা সাধারণ common
HEREDOC সমর্থন ক্ষেপক ডিফল্টরূপে অথবা যখন ইওএস টারমিনেটর ডবল উদ্ধৃত করা হয়:
price = 10
print <<"EOS" # comments can be put here
1.) The price is #{price}.
EOS
# -> "1.) The price is 10."
ইওএস টার্মিনেটরটি একক উদ্ধৃত হলে ইন্টারপোলেশন অক্ষম করা যেতে পারে:
print <<'EOS' # Disabled interpolation
3.) The price is #{price}.
EOS
# -> "3.) The price is #{price}."
এর একটি গুরুত্বপূর্ণ সীমাবদ্ধতা <<HEREDOC
হ'ল স্ট্রিং টার্মিনেটরের সমাপ্তিটি লাইনের শুরুতে হওয়া দরকার:
puts <<EOS
def foo
print "foo"
end
EOS
EOS
#-> "....def foo\n......print "foo"\n....end\n..EOS
এটি প্রায় পেতে <<-
সিনট্যাক্স তৈরি করা হয়েছিল। কোডটি আরও সুন্দর দেখানোর জন্য এটি ইওএস টার্মিনেটরকে ইন্টেন্টেড হতে দেয়। <<-
EOS টার্মিনেটরের মধ্যে থাকা লাইনগুলি এখনও সমস্ত ইনডেন্টেশন সহ তাদের পূর্ণ বর্ধনে ব্যবহৃত হয়:
puts <<-EOS # Use <<- to indent End of String terminator
def foo
print "foo"
end
EOS
# -> "..def foo\n....print "foo"\n..end"
রুবি ২.৩ থেকে, আমাদের এখন স্কুইগলি হেরডোক <<~
শীর্ষস্থানীয় সাদা স্থান সরিয়ে দিয়েছে:
puts <<~EOS # Use the squiggly HEREDOC <<~ to remove leading whitespace (since Ruby 2.3!)
def foo
print "foo"
end
EOS
# -> "def foo\n..print "foo"\nend"
খালি লাইন এবং লাইনগুলিতে কেবলমাত্র ট্যাব এবং স্থান রয়েছে << ~ দ্বারা উপেক্ষা করা হবে ~
puts <<~EOS.inspect
Hello
World!
EOS
#-> "Hello\n..World!"
যদি ট্যাব এবং স্পেস উভয়ই ব্যবহৃত হয় তবে ট্যাবগুলি 8 টি স্পেসের সমান হিসাবে বিবেচিত হবে। যদি সর্বনিম্ন-অভিযুক্ত লাইনটি কোনও ট্যাবের মাঝখানে থাকে তবে এই ট্যাবটি সরানো হবে না।
puts <<~EOS.inspect
<tab>One Tab
<space><space>Two Spaces
EOS
# -> "\tOne Tab\nTwoSpaces"
হারডোক ব্যাকটিকস ব্যবহার করে কমান্ড কার্যকর করতে যেমন কিছু ক্রেজি জিনিস করতে পারে:
puts <<`EOC`
echo #{price}
echo #{price * 2}
EOC
হারডোক স্ট্রিং সংজ্ঞাগুলি "স্ট্যাকড" হতে পারে, যার অর্থ প্রথম EOS টার্মিনেটর (নীচে EOSFOO) প্রথম স্ট্রিংটি শেষ করবে এবং দ্বিতীয়টি (নীচে EOSBAR) শুরু করবে:
print <<EOSFOO, <<EOSBAR # you can stack them
I said foo.
EOSFOO
I said bar.
EOSBAR
আমি মনে করি না যে এটির মতো কেউ কখনও ব্যবহার করবে, তবে এটি <<EOS
সত্যই কেবল একটি স্ট্রিং আক্ষরিক এবং যেখানেই স্ট্রিংটি সাধারণত রাখা যেতে পারে:
def func(a,b,c)
puts a
puts b
puts c
end
func(<<THIS, 23, <<THAT)
Here's a line
or two.
THIS
and here's another.
THAT
আপনার কাছে রুবি ২.৩ না থাকলেও রেল >=
3.0.০ থাকে তবে আপনি String.strip_heredoc
যা ব্যবহার করতে পারেন তা একই রকম হয়<<~
# File activesupport/lib/active_support/core_ext/string/strip.rb, line 22
class String
def strip_heredoc
gsub(/^#{scan(/^[ \t]*(?=\S)/).min}/, "".freeze)
end
end
puts <<-USAGE.strip_heredoc # If no Ruby 2.3, but Rails >= 3.0
This command does such and such.
Supported options are:
-h This message
...
USAGE
শতকরা স্ট্রিং লিটারালস
দেখুন RubyDoc কিভাবে এই ধরনের একটি হিসাবে একটি প্রথম বন্ধনী জোড়ায় একটি স্ট্রিং দ্বারা শতাংশ চিহ্ন অনুসৃত ব্যবহার করার জন্য %(...)
, %[...]
,%{...}
বা ইত্যাদি যেমন কোনো অ-আলফানিউমেরিক অক্ষর একজোড়া%+...+
শেষ কথা
সর্বশেষে, মূল প্রশ্নের উত্তর পেতে "কি বোঝানোর কোনও উপায় আছে?" উত্তর: রুবি সর্বদা সংক্ষেপে বোঝায় যদি দুটি স্ট্রিং (একক এবং ডাবল উদ্ধৃত) ফিরে পাওয়া যায় তবে:
puts "select..." 'from table...' "where..."
# -> "select...from table...where..."
সাবধানবাণীটি হ'ল এটি লাইন ব্রেকগুলি জুড়ে কাজ করে না, কারণ রুবি বিবৃতিটির শেষের ব্যাখ্যা দিচ্ছে এবং কেবল একটি লাইনে কেবল স্ট্রিংয়ের ফলস্বরূপ লাইন কিছুই করে না।