একটি অ্যারে দেওয়া, একটি একক উপাদান, বা শূন্যস্থান, একটি অ্যারে প্রাপ্ত - দ্বিতীয় দুটি যথাক্রমে একক উপাদান অ্যারে এবং একটি খালি অ্যারে।
আমি ভুল করে বুঝতে পারি রুবি এভাবে কাজ করবে:
[1,2,3].to_a #= [1,2,3] # Already an array, so no change
1.to_a #= [1] # Creates an array and adds element
nil.to_a #= [] # Creates empty array
তবে আপনি যা পাবেন তা হ'ল:
[1,2,3].to_a #= [1,2,3] # Hooray
1.to_a #= NoMethodError # Do not want
nil.to_a #= [] # Hooray
সুতরাং এটি সমাধান করার জন্য, আমাকে অন্য পদ্ধতিটি ব্যবহার করতে হবে, বা আমি যে সমস্ত ক্লাস ব্যবহার করতে চাইছি তার to_a পদ্ধতিটি সংশোধন করে মেটা প্রোগ্রাম করতে পারলাম - যা আমার পক্ষে কোনও বিকল্প নয়।
সুতরাং এটি একটি পদ্ধতি:
result = nums.class == "Array".constantize ? nums : (nums.class == "NilClass".constantize ? [] : ([]<<nums))
সমস্যা হ'ল এটি কিছুটা গণ্ডগোল। এটি করার একটি মার্জিত উপায় আছে? (যদি এই সমস্যাটি সমাধানের রুবি-ইশ উপায় হয় তবে আমি অবাক হয়ে যাব)
এটি কি অ্যাপ্লিকেশন আছে? এমনকি একটি অ্যারে রূপান্তর কেন?
রেলের অ্যাক্টিভেকর্ডে, কল করে বলুন, user.posts
হয় পোস্টগুলির একটি অ্যারে, একটি একক পোস্ট, বা শূন্য করে দেবে। এর ফলাফলগুলি নিয়ে কাজ করে এমন পদ্ধতিগুলি লেখার সময়, এটি অনুমান করা সবচেয়ে সহজ যে পদ্ধতিটি একটি অ্যারে নেবে, যার শূন্য, এক বা অনেক উপাদান থাকতে পারে। উদাহরণ পদ্ধতি:
current_user.posts.inject(true) {|result, element| result and (element.some_boolean_condition)}
==
পরিবর্তে বোঝানো উচিত =
, তাই না?
[1,2,3].to_a
নেই না আসতে [[1,2,3]]
! এটি ফিরে আসে [1,2,3]
।
user.posts
কখনও একটি পোস্ট ফেরত দেওয়া উচিত নয়। কমপক্ষে, আমি এটি কখনও দেখিনি।