কোন স্ট্যাটিকালি টাইপ করা ভাষাগুলি ফাংশন রিটার্ন মানগুলির জন্য ছেদ প্রকারের সমর্থন করে?


17

প্রাথমিক নোট:

এই প্রশ্নটি বেশ কয়েকটি সম্পাদনার পরে বন্ধ হয়ে গেছে কারণ আমি কী চাইছিলাম তা সঠিকভাবে জানাতে আমার কাছে সঠিক পরিভাষার অভাব ছিল। স্যাম টোবিন-হচস্টাড্ট তখন একটি মন্তব্য পোস্ট করেছেন যা আমাকে ঠিক কীটি চিনতে পেরেছিল: প্রোগ্রামিং ভাষাগুলি যা ফাংশন রিটার্ন মানগুলির জন্য ছেদ করার ধরণকে সমর্থন করে।

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

এমন কোনও জনপ্রিয় স্ট্যাটিকালি ও জোরালোভাবে টাইপ করা প্রোগ্রামিং ভাষা (যেমন হাস্কেল, জেনেরিক জাভা, সি #, এফ # ইত্যাদি) সমর্থন করে ফাংশন রিটার্ন মানগুলির জন্য ছেদ করার ধরণের ? যদি তা হয় তবে কোনটি এবং কীভাবে?

(আমি যদি সত্যবাদী হয়ে থাকি তবে আমি কাউকে মূল স্রোত যেমন যেমন সি # বা জাভাতে ছেদ করার ধরণগুলি কীভাবে প্রকাশ করতে হয় তার উপায় প্রদর্শন করে দেখতে খুব ভাল লাগবে))

ছেদ করার ধরণগুলি কেমন দেখতে পারে তার একটি দ্রুত উদাহরণ দেব, সি # এর মতো কিছু সিউডোকোড ব্যবহার করে:

interface IX { … }
interface IY { … }
interface IB { … }

class A : IX, IY { … }
class B : IX, IY, IB { … }

T fn()  where T : IX, IY
{
    return … ? new A()  
             : new B();
}

এটি হ'ল, ফাংশনটি fnকোনও প্রকারের উদাহরণ দেয় T, যার মধ্যে কলার কেবল এটিই জানে যে এটি ইন্টারফেস প্রয়োগ করে IXএবং IY। (এটি জেনেরিকের সাথে পৃথক নয়, কলকারীটি কংক্রিটের ধরণের পছন্দ করতে পারে না T- ফাংশনটি করে। এটি থেকে আমি মনে করি যেT বাস্তবে সর্বজনীন ধরণের নয়, তবে একটি অস্তিত্বের ধরণের))

পিএস: আমি সচেতন যে কেউ কেবল একটি সংজ্ঞায়িত করতে পারে interface IXY : IX, IYএবং এর রিটার্নের ধরণের পরিবর্তন করতে fnপারে IXY। তবে, এটি আসলে একই জিনিস নয়, কারণ প্রায়শই আপনি IXYএকটি পূর্বনির্ধারিত ধরণের অতিরিক্ত ইন্টারফেসের উপর চাপ দিতে পারবেন না Aযা কেবল প্রয়োগ করে IXএবং IYপৃথক করে দেয়।


পাদটীকা: চৌরাস্তা প্রকার সম্পর্কে কিছু সংস্থান:

"টাইপ সিস্টেম" এর উইকিপিডিয়া নিবন্ধের ছেদযুক্ত প্রকারগুলি সম্পর্কে একটি উপবিংশ রয়েছে ।

বেঞ্জামিন সি পিয়ার্স (১৯৯১) এর প্রতিবেদন, "ছেদ প্রকার, ইউনিয়ন প্রকার এবং পলিমারফিজম সহ প্রোগ্রামিং"

ডেভিড পি। ক্যানিংহাম (২০০৫), "অনুশীলনের আনুপাতিক প্রকারগুলি" , যা উইকিপিডিয়া নিবন্ধে উল্লিখিত ফোর্সিথ ভাষা সম্পর্কিত একটি কেস স্টাডি ধারণ করে।

একটি স্ট্যাক ওভারফ্লো প্রশ্ন "ইউনিয়ন ধরনের এবং ছেদ ধরনের" যা বহু ভাল উত্তর পেয়েছি, তাদের মধ্যে এই এক যা ছেদ ধরনের উপরে খনি অনুরূপ একটি pseudocode উদাহরণ দেয়।


6
এই অস্পষ্টতা কেমন? Tকোনও প্রকারের সংজ্ঞা দেয়, এমনকি যদি এটি কেবল "কিছু প্রকার যা প্রসারিত / সরঞ্জাম IXএবং IY" হিসাবে ফাংশন ঘোষণার মধ্যে সংজ্ঞায়িত করা হয় । প্রকৃত রিটার্ন মান যে ( Aবা Bযথাক্রমে) এর একটি বিশেষ ক্ষেত্রে এটি সত্য যে এখানে কিছু বিশেষ নয়, আপনি Objectপরিবর্তে ব্যবহার করে এটি অর্জন করতে পারেন T
জোয়াকিম সাউর

1
রুবি আপনাকে কোনও ফাংশন থেকে যা খুশি ফিরে আসতে দেয়। অন্যান্য গতিশীল ভাষার জন্য একই।
থারস্টেন মোলার

আমি আমার উত্তর আপডেট করেছি। @ জোয়াচিম: আমি জানি যে "অ্যাম্বিগাস" শব্দটি প্রশ্নের সঠিক ধারণাটি সঠিকভাবে গ্রহণ করতে পারে না, এইভাবে উদ্দেশ্যটির অর্থ স্পষ্ট করার উদাহরণ।
stakx

1
বিজ্ঞাপন পিএস: ... যা আপনার প্রশ্নটিকে " Tইন্টারফেসের Iসমস্ত পদ্ধতি প্রয়োগ করার সাথে সাথে কোন ভাষাটি ইন্টারফেস হিসাবে ধরণের চিকিত্সার অনুমতি দেয় , কিন্তু সেই ইন্টারফেসটিকে ঘোষণা দেয় না" এ পরিবর্তিত করে ।
জানু হুডেক

6
এই প্রশ্নটি বন্ধ করে দেওয়া একটি ভুল ছিল, কারণ একটি সুনির্দিষ্ট উত্তর রয়েছে যা ইউনিয়নের ধরণ । ইউনিয়ন প্রকারভেদগুলি ( টাইপড র‌্যাকেট) [ ডকস.রেকেট-lang.org/ts-guide/] এর মতো ভাষায় উপলভ্য ।
স্যাম টোবিন-হচস্টাড্ট

উত্তর:


5

স্কালায় সম্পূর্ণ অন্তর্নির্মিত প্রকার রয়েছে ভাষায় নির্মিত:

trait IX {...}
trait IY {...}
trait IB {...}

class A() extends IX with IY {...}

class B() extends IX with IY with IB {...}

def fn(): IX with IY = if (...) new A() else new B()

বিন্দু ভিত্তিক স্কালায় সত্য ছেদ করার ধরণ থাকবে তবে বর্তমান / প্রাক্তন স্কেলার জন্য নয়।
হংকক্সু চেন

9

আসলে, স্পষ্ট উত্তর: জাভা

যদিও জাভা আপনাকে ছেদ করার ধরণগুলি সমর্থন করে তা জানতে অবাক করে দিতে পারে ... এটি "&" টাইপযুক্ত বাউন্ড অপারেটরের মাধ্যমে ঘটে through উদাহরণ স্বরূপ:

<T extends IX & IY> T f() { ... }

দেখুন এই লিঙ্কে জাভা একাধিক টাইপ সীমা, এবং এই জাভা API থেকে।


সংকলনের সময় আপনি যদি টাইপটি না জানেন তা কি কাজ করবে? অর্থাৎ একজন লিখতে পারেন <T extends IX & IY> T f() { if(condition) return new A(); else return new B(); }। এবং আপনি কিভাবে এই ক্ষেত্রে ফাংশন কল? A বা B উভয়ই কল সাইটে উপস্থিত হতে পারে না কারণ আপনি জানেন না আপনি কোনটি পাবেন।
জানু হুডেক

হ্যাঁ, আপনি ঠিক বলেছেন --- এটি দেওয়া মূল উদাহরণের সমতুল্য নয় কারণ আপনাকে কোনও কংক্রিটের প্রকার সরবরাহ করতে হবে না। যদি আমরা ছেদ সীমানা সহ ওয়াইল্ডকার্ডগুলি ব্যবহার করতে পারি, তবে আমাদের এটি ছিল। মত আমরা পারব না মনে হয় ... এবং আমি সত্যিই জানি না কেন (দেখুন এই )। তবে, এখনও জাভাতে ছেদ করার ধরণের ধরণের রয়েছে ...
redjamjar

1
আমি হতাশ বোধ করি যে আমি জাভা করেছি 10 বছরে আমি কখনও ছেদর ধরন সম্পর্কে জানতে পারি নি। এখন যেহেতু আমি ফ্লাটাইপের সাথে সর্বদা সময় ব্যবহার করেছি আমি ভেবেছিলাম সেগুলি জাভাতে সবচেয়ে বড় অনুপস্থিত বৈশিষ্ট্য, কেবল এটিই সন্ধান করতে যে আমি তাদেরকে বুনোতে কখনও দেখিনি। লোকেরা তাদের গুরুত্ব সহকারে ব্যবহার করছে। আমি মনে করি তারা যদি আরও পরিচিত হত তবে স্প্রিংয়ের মতো নির্ভরতা ইনজেকশন ফ্রেমওয়ার্কগুলি এত বেশি জনপ্রিয় হয়ে উঠত না।
অ্যান্ডি

8

মূল প্রশ্নটি "অস্পষ্ট ধরণের" জন্য জিজ্ঞাসা করা হয়েছিল। এর জন্য উত্তরটি ছিল:

দ্ব্যর্থহীন প্রকার, স্পষ্টতই কোনটি নয়। কলকারীকে তারা কী পাবেন তা জানতে হবে, সুতরাং এটি সম্ভব নয়। যে কোনও ভাষা প্রত্যাবর্তন করতে পারে তা হ'ল হয় বেস টাইপ, ইন্টারফেস (সম্ভবত চৌরাস্তা টাইপের মতো স্বয়ংক্রিয়ভাবে উত্পাদিত) বা ডায়নামিক টাইপ (এবং ডায়নামিক টাইপটি কেবল নাম অনুসারে কল করে টাইপ করুন, পেতে এবং সেট পদ্ধতিগুলি)।

অনুমিত ইন্টারফেস:

সুতরাং মূলত আপনি চান যে এটি একটি ইন্টারফেস ফিরে আসে IXYযা উদ্ভূত হয়েছিল IX এবং IY যদিও সেই ইন্টারফেসটি উভয়ই Aবা হিসাবে ঘোষণা করা হয়নিB , সম্ভবত কারণ ঘোষিত হয় নি যখন সেই ধরনের সংজ্ঞায়িত করা হয়েছে। এই ক্ষেত্রে:

  • স্পষ্টতই যে কোনও গতিশীলভাবে টাইপ করা হয়।
  • আমার মনে নেই যে কোনও স্ট্যাটিকালি টাইপ করা মূলধারার ভাষা ইন্টারফেসটি তৈরি করতে সক্ষম হবে (এটি ইউনিয়নের ধরণের Aএবং Bবা ছেদ সংক্রমণের ধরণের IXএবং IY) itself
  • যাও , কারণ এটি ক্লাসগুলি ইন্টারফেস বাস্তবায়িত করে যদি তাদের কোনও সঠিকভাবে ঘোষণা না করে সঠিক পদ্ধতি থাকে তবে। সুতরাং আপনি কেবল এমন একটি ইন্টারফেস ঘোষণা করুন যা সেখানে দুটি গ্রহণ করে এবং এটি ফেরত দেয়।
  • স্পষ্টতই অন্য যে কোনও ভাষা যেখানে টাইপটি সেই ধরণের সংজ্ঞার বাইরে ইন্টারফেস প্রয়োগের জন্য সংজ্ঞায়িত করা যায় তবে আমি জিও ব্যতীত অন্য কোনও স্মরণ করি বলে মনে করি না।
  • এটি কোনও ধরণের ক্ষেত্রেই সম্ভব নয় যেখানে কোনও ইন্টারফেস বাস্তবায়ন করার জন্য ধরণের সংজ্ঞা নিজেই সংজ্ঞায়িত করতে হয়। তবে আপনি বেশিরভাগ ক্ষেত্রে মোড়কে সংজ্ঞায়িত করে প্রায় দুটি স্থানে কাজ করতে পারেন যা দুটি ইন্টারফেস প্রয়োগ করে এবং সমস্ত পদ্ধতি একটি মোড়ানো বস্তুতে অর্পণ করে।

পিএস একটি দৃ strongly ়ভাবে টাইপ করা ভাষা হ'ল এমন একটিতে যা প্রদত্ত প্রকারের কোনও বস্তুকে অন্য ধরণের অবজেক্ট হিসাবে ধরে নেওয়া যায় না, যখন দুর্বলভাবে টাইপ করা ভাষা এমন একটি হয় যা পুনরায় ব্যাখ্যা করতে পারে । সুতরাং সমস্ত গতিশীলভাবে টাইপ করা ভাষাগুলি দৃ strongly ়ভাবে টাইপ করা হয় , যখন দুর্বলভাবে টাইপ করা ভাষাগুলি হ'ল সমাবেশ, সি এবং সি ++, তিনটিই স্থিতিশীলভাবে টাইপ করা হয় ।


এটি সঠিক নয় প্রকারটি সম্পর্কে অস্পষ্ট কিছু নেই। কোনও ভাষা তথাকথিত "ছেদযুক্ত প্রকারের "গুলিতে ফিরে আসতে পারে --- মূলধারার কোনও ভাষা যদি তা করে তবে এটি খুব কম।
redjamjar

@ রেডজামজার: আমি যখন উত্তর দিয়েছিলাম এবং "দ্ব্যর্থক ধরণের" জিজ্ঞাসা করি তখন প্রশ্নের আলাদা শব্দবন্ধ ছিল। সে কারণেই এটি শুরু হয়। প্রশ্নটি তখন থেকে উল্লেখযোগ্যভাবে পুনরায় লেখা হয়েছিল। আমি মূল এবং বর্তমান শব্দ দুটি উল্লেখ করার জন্য উত্তরটি প্রসারিত করব।
জানু হুডেক

দুঃখিত, আমি স্পষ্টতই মিস করেছি!
redjamjar

গোলংকে উল্লেখ করার জন্য +1, এটি সম্ভবত কোনও সাধারণ ভাষার সর্বোত্তম উদাহরণ যা এটির অনুমতি দেয় এমনকি এটি করার উপায়টি যদি একটু সার্কিট হয়।
জুলে

3

গো প্রোগ্রামিং ভাষা ধরনের রয়েছে তবে কেবল ইন্টারফেসের ধরণের জন্য।

Go তে কোনও ধরণের জন্য যার জন্য সঠিক পদ্ধতিগুলি সংজ্ঞায়িত হয় স্বয়ংক্রিয়ভাবে একটি ইন্টারফেস প্রয়োগ করে, তাই আপনার PS তে আপত্তি প্রযোজ্য নয়। অন্য কথায়, কেবল এমন একটি ইন্টারফেস তৈরি করুন যা ইন্টারফেসের সমস্ত ক্রিয়াকলাপ একত্রিত করতে হবে (যার জন্য একটি সাধারণ বাক্য গঠন আছে) এবং এটি সমস্ত জাস্ট ওয়ার্কস।

একটি উদাহরণ:

package intersection

type (
    // The first component type.
    A interface {
        foo() int
    }
    // The second component type.
    B interface {
        bar()
    }

    // The intersection type.
    Intersection interface {
        A
        B
    }
)

// Function accepting an intersection type
func frob(x Intersection) {
    // You can directly call methods defined by A or B on Intersection.
    x.foo()
    x.bar()

    // Conversions work too.
    var a A = x
    var b B = x
    a.foo()
    b.bar()
}

// Syntax for a function returning an intersection type:
// (using an inline type definition to be closer to your suggested syntax)
func frob2() interface { A; B } {
    // return something
}

3

আপনি একটি সীমাবদ্ধ অস্তিত্বের ধরণ ব্যবহার করে যা করতে চান তা করতে সক্ষম হতে পারেন, যা জেনেরিকস এবং সীমানাযুক্ত বহুবৈজ্ঞানিক যেমন কোনও ভাষাতে এনকোড করা যেতে পারে, যেমন সি #।

রিটার্নের ধরনটি এমন কিছু হবে (স্যুইডো কোডে)

IAB = exists T. T where T : IA, IB

বা সি # তে:

interface IAB<IA, IB>
{
    R Apply<R>(IABFunc<R, IA, IB> f);
}

interface IABFunc<R, IA, IB>
{
    R Apply<T>(T t) where T : IA, IB;
}

class DefaultIAB<T, IA, IB> : IAB<IA, IB> where T : IA, IB 
{
    readonly T t;

    ...

    public R Apply<R>(IABFunc<R, IA, IB> f) {
        return f.Apply<T>(t);
    }
}

দ্রষ্টব্য: আমি এটি পরীক্ষা করিনি।

বিন্দু যে IABকোনো রিটার্ন টাইপ জন্য একটি IABFunc আবেদন করতে পারবেন হতে হয়েছে R, এবং একটি IABFuncকোনো কাজ করতে সক্ষম হতে হয়েছে Tযা উভয় উপশাখাকে IAএবং IB

এর উদ্দেশ্যটি DefaultIABকেবলমাত্র একটি বিদ্যমান Tযা উপ টাইপগুলি IAএবং IB। মনে রাখবেন যে এটি আপনার থেকে আলাদা IAB : IA, IBযা DefaultIABসর্বদা বিদ্যমানটিতে যুক্ত করা যেতে পারেT পরে ।

তথ্যসূত্র:


পদ্ধতির কাজ করে এক পরামিতি টি, আইএ, আইবি সঙ্গে একটি জেনেরিক অবজেক্ট মোড়কের টাইপ যোগ, টি সঙ্গে ইন্টারফেস, কোন ধরনের টি একটি রেফারেন্স encapsulates এবং দেয় সীমাবদ্ধ Applyএটি উপর প্রার্থনা করা হবে। বড় সমস্যাটি হ'ল কোনও ইন্টারফেস বাস্তবায়নের জন্য বেনামি ফাংশনটি ব্যবহার করার কোনও উপায় নেই, সুতরাং এটির মতো নির্মাণগুলি ব্যবহারে আসল ব্যথা হয়ে থাকে।
সুপারক্যাট

3

টাইপসক্রিপ্ট হ'ল অন্য টাইপ করা ভাষা যা আন্তঃনীতি প্রকারকেT & U (ইউনিয়নের ধরণের পাশাপাশি T | U) সমর্থন করে ) উন্নত প্রকার সম্পর্কে তাদের ডকুমেন্টেশন পৃষ্ঠা থেকে উদ্ধৃত একটি উদাহরণ :

function extend<T, U>(first: T, second: U): T & U {
    let result = <T & U>{};
    for (let id in first) {
        (<any>result)[id] = (<any>first)[id];
    }
    for (let id in second) {
        if (!result.hasOwnProperty(id)) {
            (<any>result)[id] = (<any>second)[id];
        }
    }
    return result;
}

2

প্রথম শ্রেণীর ইউনিয়ন এবং চৌরাস্তা প্রকারের জন্য সিলোনটির সম্পূর্ণ সমর্থন রয়েছে ।

আপনি হিসাবে ইউনিয়ন টাইপ X | Yএবং একটি ছেদপূর্ণ টাইপ লিখুন X & Y

আরও ভাল, সিলোন এই ধরণের সম্পর্কে প্রচুর পরিশীলিত যুক্তিযুক্ত বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করে:

  • প্রধান instantiations: উদাহরণস্বরূপ, Consumer<X>&Consumer<Y>একই ধরনের হিসাবে Consumer<X|Y>যদি Consumercontravariant হয় X, এবং
  • ছদ্মবেশ: উদাহরণস্বরূপ, নীচের ধরণের Object&Nullহিসাবে একই রকম Nothing

0

সি ++ ফাংশনগুলির সকলের একটি নির্দিষ্ট রিটার্ন টাইপ থাকে তবে তারা পয়েন্টারগুলি ফেরত দিলে পয়েন্টারগুলি সীমাবদ্ধতা সহ বিভিন্ন ধরণের নির্দেশ করতে পারে point

উদাহরণ:

class Base {};
class Derived1: public Base {};
class Derived2: public Base{};

Base * function(int derived_type)
{
    if (derived_type == 1)
        return new Derived1;
    else
        return new Derived2;
}

প্রত্যাশিত পয়েন্টারের আচরণ নির্ভর করবে কোন virtualফাংশনগুলি সংজ্ঞায়িত করা হয়েছে তার উপর নির্ভর করে এবং আপনি এই বলে,

Base * foo = function(...);dynamic_cast<Derived1>(foo)

পলিমারফিজমটি সি ++ তে কীভাবে কাজ করে।


এবং অবশ্যই যে কোনও একটি anyবা এক variantপ্রকার ব্যবহার করতে পারে , যেমন টেম্পলেটগুলি বুস্ট সরবরাহ করে। সুতরাং, সীমাবদ্ধতা থাকে না।
Deduplicator

যদিও এটি প্রশ্নটি জিজ্ঞাসা করছে এটি পুরোপুরি নয়, যদিও এটি নির্দিষ্ট করার জন্য ছিল যে রিটার্নের ধরণটি একই সাথে দুটি চিহ্নিত সুপারক্লাস প্রসারিত করে, অর্থাৎ class Base1{}; class Base2{}; class Derived1 : public Base1, public Base2 {}; class Derived2 : public Base1, public Base2 {}... এখন আমরা কোন ধরণেরটি নির্দিষ্ট করতে পারি যা প্রত্যাবর্তনের অনুমতি দেয় Derived1অথবা Derived2না উভয়ই Base1না Base2সরাসরি?
জুলিউস

-1

পাইথন

এটি খুব, খুব দৃ strongly়ভাবে টাইপ করা।

কিন্তু কোনও ফাংশন তৈরি হওয়ার পরে প্রকারটি ঘোষিত হয় না, সুতরাং প্রত্যাবর্তিত অবজেক্টগুলি "অস্পষ্ট" হয়।

আপনার নির্দিষ্ট প্রশ্নে আরও ভাল শব্দটি হতে পারে "পলিমারফিক"। পাইথনের সাধারণ ব্যবহারের ক্ষেত্রে এটি হ'ল বৈকল্পিক প্রকার যা সাধারণ ইন্টারফেস প্রয়োগ করে return

def some_function( selector, *args, **kw ):
    if selector == 'this':
        return This( *args, **kw )
    else:
        return That( *args, **kw )

পাইথন যেহেতু দৃ strongly়ভাবে টাইপ করা হয়েছে, ফলস্বরূপ অবজেক্টটি হ'ল উদাহরণস্বরূপ Thisবা That(সহজেই) জোর করা বা অন্য ধরণের অবজেক্টে কাস্ট করা যাবে না।


এটি বেশ বিভ্রান্তিকর; যখন কোনও বস্তুর প্রকারটি বেশ অপরিবর্তনীয়, মানগুলি বেশ সহজেই প্রকারের মধ্যে রূপান্তরিত হতে পারে। উদাহরণস্বরূপ, তুচ্ছভাবে।
জেমস ইয়ংম্যান

1
@ জামেস ইয়ংম্যান: কি? এটি সব ভাষার ক্ষেত্রেই সত্য। আমি যে সমস্ত ভাষা দেখেছি সেগুলিতে বাম, ডান এবং মাঝখানে রূপান্তর রূপান্তর করতে হবে _ আমি আপনার মন্তব্যটি মোটেও পাই না। তুমি কি বিস্তারিত বলতে পারো?
এস .লট

"পাইথন দৃ strongly়ভাবে টাইপ করা হয়েছে" আপনি কী বোঝাতে চেয়েছিলেন তা বোঝার চেষ্টা করছিলাম। আপনি "দৃ strongly়ভাবে টাইপ করা" বলতে কী বোঝাতে চেয়েছি তা ভুল বুঝেছি। স্পষ্টভাবে পাইথনের এমন কয়েকটি বৈশিষ্ট্য রয়েছে যা আমি দৃ strongly়ভাবে টাইপ করা ভাষার সাথে সংযুক্ত করবো। উদাহরণস্বরূপ, এটি এমন প্রোগ্রামগুলি গ্রহণ করে যাতে কোনও ফাংশনের রিটার্ন টাইপ কলারের ব্যবহারকারীর ব্যবহারের সাথে মানানসই নয়। উদাহরণস্বরূপ, "x, y = F (z)" যেখানে F () প্রদান করে (z, z, z)।
জেমস ইয়ংম্যান

পাইথন অবজেক্টের ধরণ (গুরুতর যাদু ছাড়াই) পরিবর্তন করা যায় না। জাভা এবং সি ++ এর সাথে থাকায় কোনও "কাস্ট" অপারেটর নেই। এটি প্রতিটি বস্তুকে দৃ strongly়ভাবে টাইপ করে। পরিবর্তনশীল নাম এবং ফাংশন নামের কোনও প্রকারের বাঁধাই থাকে না, তবে বস্তুগুলি নিজেরাই দৃ strongly়ভাবে টাইপ করা হয়। এখানে মূল ধারণাটি ঘোষণার উপস্থিতি নয়। মূল ধারণাটি কাস্ট অপারেটরগুলির উপলব্ধ। এছাড়াও মনে রাখবেন যে এটি আমার কাছে সত্যবাদী বলে মনে হচ্ছে; মডারেটররা যদিও এটি নিয়ে বিতর্ক করতে পারে।
এসলট

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