আপনি রুবিতে -> অপারেটরটিকে কী বলে?


205
  1. ->নিম্নলিখিতটি হিসাবে আপনি অপারেটরটিকে কী বলে ?

    ->(...) do
      ...
    end
    
  2. নিম্নলিখিত স্নিপেটগুলি সমতুল্য নয়?

    succ = ->(x) {x + 1}
    succ = lambda {|x| x + 1}
    

70
এটি বিরক্তিকর যে আপনি "->" গুগল করতে পারবেন না - জিজ্ঞাসা করার জন্য ভাল প্রশ্ন!
কেভিন

10
@Kevin আপনি অবশ্য স্ট্যাক ওভারফ্লো জন্য অনুসন্ধান করতে বিল্ট-ইন ইলাস্টিক অনুসন্ধান ব্যবহার করতে পারেন "->": title:"->" [ruby] is:question। মূলটি হ'ল উদ্ধৃতি চিহ্নগুলি ব্যবহার করা।

8
সিম্বলহাউন্ড এটিও করতে পারে: সিম্বহাউন্ড.com
অ্যান্ড্রু গ্রিম

7
বিরক্তিকর বা বিরক্তিকর নয়, তবে "রুবি ->" অনুরোধটির জন্য গুগল করা প্রথম প্রশ্নের ফলাফল হিসাবে এই প্রশ্নের লিঙ্ক দিন।
fl-web

6
@ কেভিন সম্ভবত বিগত 2 বছরে জিনিসগুলি পরিবর্তিত হয়েছে, তবে গুগলিং ruby "->"হ'ল আমি এই পোস্টটি কীভাবে পেয়েছি :)
নিপ্পাইসরাস

উত্তর:


238

ইন রুবি প্রোগ্রামিং ল্যাঙ্গুয়েজ ( "পদ্ধতি, Procs, Lambdas, এবং বন্ধ"), একটি ল্যামডা ব্যবহার নির্ধারণ করা ->বলা হয় ল্যামডা আক্ষরিক

succ = ->(x){ x+1 }
succ.call(2)

কোডটি নিম্নোক্তটির সমান।

succ = lambda { |x| x + 1 }
succ.call(2)

অনানুষ্ঠানিকভাবে শুনেছি, এটিকে ছুরিকাঘাতের ল্যাম্বডা বা ছুরিকাঘাতপূর্ণ আক্ষরিক বলা হচ্ছে ।


127

=>== হ্যাশ রকেট

একটি হ্যাশ মানচিত্রের আক্ষরিক মানগুলি থেকে কীগুলি পৃথক করে।


->== ড্যাশ রকেট

রুবি ১.৯. এক্স (আরগস ছাড়াই) এবং রুবি ২ এক্স এক্স (আরগস সহ) এ ল্যাম্বডা আক্ষরিক সংজ্ঞা দিতে ব্যবহৃত হয়। আপনি যে উদাহরণগুলি ( ->(x) { x * 2 }এবং lambda { |x| x * 2 }) দেন তা আসলে সমতুল্য।


10
এফওয়াইআই অগ্রাধিকার নিয়মের কারণে do/ ব্যবহার করলে 2 টি শৈলী পুরোপুরি বিনিময়যোগ্য হয় না end। এটি একটি পরিদর্শন ল্যামডা ছাপে: puts -> do 1 end। এটি putsলম্বা থেকে চুরি করে আরগুমেন্টেররর কারণ হিসাবে ব্লকটি পাস করে :puts lambda do 1 end
কেলভিন

1
এছাড়াও, রুবি ১.৯.৩ এর ল্যাম্বডা আক্ষরিক যুক্তিগুলির অনুমতি দেয়।
কেলভিন 18

3
@Kelvin যে হবে কারণ রুবি ব্যাখ্যা করার চেষ্টা করে puts lambda do 1 endযেমন puts(lambda) do 1 endবদলে puts(lambda do 1 end)। পরেরটি বাস্তবে কাজ করে - রুবি কেবল বন্ধনী না থাকলে putsপদ্ধতিটির পরিবর্তে পদ্ধতিতে ব্লকটি পাস করার চেষ্টা করে lambda
PJSCopeland

1
@ পিজেএসকোপল্যান্ড আমি বলছি না যে আপনি তাদের অনুরূপ আচরণ করতে পারবেন না। আমি বলছি যে এগুলি 100% বিনিময়যোগ্য সিনট্যাক্স-ভিত্তিক নয়, অর্থাত্ আপনি সব ক্ষেত্রে সহজেই একটি ড্রপ-ইন প্রতিস্থাপন করতে পারবেন না (কারণ কখনও কখনও আপনার জন্য অতিরিক্ত বন্ধনী প্রয়োজন lambda)।
কেলভিন

@ আরদুরান্দ আপনি কি সংক্ষিপ্তসার দিয়ে সম্পাদনাটি করেছিলেন "স্ট্যাব্বি ল্যাম্বডাস রুবি ১.৯-তে আর্গুমেন্ট গ্রহণ করতে পারে না"? এটি সঠিক নয়, কমপক্ষে 1.9.3 এর জন্য - আরোগুলি অনুমোদিত।
কেলভিন

5

ল্যাম্বদা রকেট

আমি এই নিবন্ধ থেকে পেয়েছি। কিন্তু প্রথমে একটি Google রুবি ল্যামডা সাধারণভাবে সংক্ষেপে অনুসন্ধান http://ruby-journal.com/becareful-with-space-in-lambda-hash-rocket-syntax-between-ruby-1-dot-9-and-2-dot -0 /


অনুসন্ধানের শর্তাবলী পরামর্শের জন্য +1
akostadinov

3

->(x) { ... }হিসাবে একই lambda { |x| ... }। এটি একটি ল্যাম্বডা তৈরি করে। কার্নেল দেখুন # ল্যাম্বদা একটি ল্যাম্বদা একটি প্রকারের প্র্যাক, এটি নিশ্চিত করে যে এতে পাস হওয়া পরামিতির সংখ্যাটি সঠিক। আরও দেখুন Proc :: নতুন এবং কার্নেল # proc

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