কম্পিউটার

চতুর হ্যাক যা `items.map(&:name)` কাজ করে

অ্যারেগুলির উপর পুনরাবৃত্তি করার সময়, শর্টহ্যান্ডের এক টুকরো আছে যা আমি নিজেকে বারবার ব্যবহার করি। এটি হল &:ট্রিক, ওরফে "অ্যাম্পারস্যান্ড কোলন" বা "প্রেটজেল কোলন"। আপনি যদি এটির সাথে পরিচিত না হন তবে এটি কীভাবে কাজ করে তা এখানে রয়েছে:

words = ["would", "you", "like", "to", "play", "a", "game?"]

# this...
words.map &:length

# ..is equivalent to this:
words.map { |w| w.length }

সম্প্রতি অবধি, আমি ধরে নিয়েছিলাম যে &:সিনট্যাক্স একটি অপারেটর ছিল। কিন্তু এটা না. এটি একটি চতুর হ্যাক যা ActiveSupport-এ শুরু হয়েছিল এবং Ruby 1.8.7-এ একটি অফিসিয়াল বৈশিষ্ট্য হয়ে উঠেছে।

The &operator

AND লজিক অপারেশনের জন্য ব্যবহার করা ছাড়াও, "&" অক্ষরের রুবিতে আরেকটি ব্যবহার রয়েছে। একটি মেথড আর্গুমেন্টের শুরুতে যোগ করা হলে, এটি তার অপারেন্ডে to_proc কল করে এবং এটিকে ব্লক হিসাবে পাস করে। ওটা একটা মুখের কথা। উদাহরণটি দেখতে অনেক সহজ:

def my_method(&block)
  block.call
end

class Greeter
  def self.to_proc
    Proc.new { "hello" }
  end
end

my_method(&Greeter) # returns "hello"

চিহ্ন#to_proc

আপনি একটি to_proc যোগ করতে পারেন প্রতীক সহ যেকোনো বস্তুর পদ্ধতি। রুবি &:-এর অনুমতি দিতে ঠিক এটাই করে শর্টকাট এটা এই মত কিছু দেখায়:

class Symbol
  def to_proc
    Proc.new do |item|
      item.send self
    end
  end
end

কাদা হিসাবে পরিষ্কার? গুরুত্বপূর্ণ অংশ হল item.send(self) . স্বয়ং, এই ক্ষেত্রে প্রতীককে বোঝায়।

এটি সব একসাথে রাখা

each এর মত গননাযোগ্য পদ্ধতি এবং map একটি ব্লক গ্রহণ করুন। প্রতিটি আইটেমের জন্য তারা ব্লককে কল করে এবং এটিকে আইটেমের একটি রেফারেন্স দেয়। এই ক্ষেত্রে ব্লকটি প্রতীকে to_proc কল করার মাধ্যমে তৈরি করা হয়।

# &:name evaluates to a Proc, which does item.send(:name)
items.map(&:name)

এই সম্পর্কে আকর্ষণীয় বিষয় হল যে map জানেন না যে এর কোনোটিই চলছে! বেশিরভাগ কাজ :name দ্বারা করা হচ্ছে প্রতীক এটা অবশ্যই চতুর...আমার স্বাদের জন্য প্রায় খুব চতুর। কিন্তু এটি এই মুহুর্তে বছরের পর বছর ধরে রুবির স্ট্যান্ডার্ড লাইব্রেরির একটি অংশ, এবং এটি এত সহজ যে আমি এখনই এটি ব্যবহার করা বন্ধ করব সন্দেহ নেই। :)


  1. কিভাবে স্কাইপের নাম পরিবর্তন করবেন?

  2. টেলস:লিনাক্স ডিস্ট্রিবিউশন যা আপনাকে অনলাইনে সম্পূর্ণ বেনামী করে তোলে

  3. রুবি মানচিত্র পদ্ধতি কীভাবে ব্যবহার করবেন (উদাহরণ সহ)

  4. সর্বোচ্চ উচ্চ-প্রযুক্তি হ্যাক যা এ পর্যন্ত ঘটেছে!