Ровя из една статиика за wtf features в различните езици
class RandomSubclass < [Array, Hash, String, Fixnum, Float, TrueClass].sample
...
end
Работи перфектно, нарочно ли е или е страничен (д)ефект на динамичността?
Ровя из една статиика за wtf features в различните езици
class RandomSubclass < [Array, Hash, String, Fixnum, Float, TrueClass].sample
...
end
Работи перфектно, нарочно ли е или е страничен (д)ефект на динамичността?
Умишлено е. Няма причина да е забранено. Още повече, можеш да го направиш в (почти) всеки динамично-типизиран език, за който се сетиш. Python, Perl, JavaScript, you name it.
Интересно ми е, какъв проблем намираш с това? Очевидно кодът не е много полезен, но какво и защо трябва да прави Ruby, за да го предотврати?
Под "умишлено" визирам да е изрично написана точно тази функционалност :)
Интересно ми беше дали някой е имал достатъчно малко работа за да имплементира подобно нещо или просто е решил, че "чак толкова малоумни програмисти няма да има" и е пропуснал да сложи проверка ...
Ето как се стига до това решение:
Първият въпрос е дали това отдясно на class RandomSubclass <
да бъде оценено (1) по време на компилация* или (2) по време на изпълнение.
Повечето динамично-типизирани езици избират по време на изпълнение. Има няколко причини:
След като се вземе такова решение, езика няма голям избор. Не можеш да анализираш израза и да кажеш, че е глупав избор за родител. Например, опитай да измислиш каква проверка могат да сложат авторите на Ruby.
А дори да има нещо, винаги ще има начин да се заобиколи. Така че подобно ограничение няма смисъл.
Трябва да сте влезли в системата, за да може да отговаряте на теми.