360 градусов = 2*pi радианы
, Который означает deg2rad (x) = x*pi/180 и rad2deg (x) = 180x/pi;
Ruby имеет объектный уровень доступа. Вот цитата из Programming Ruby:
Разница между "защищенным" и "частный" довольно тонкий, и в Ruby отличается от большинства общие ОО-языки. Если метод защищенный, его может называть любой экземпляр определяющего класса или его подклассы. Если метод является частным, он может вызываться только в контексте вызывающего объекта --- он никогда не возможно получить доступ к другому объекту частные методы напрямую, даже если объект того же класса, что и вызывающий.
А вот источник: http://whytheluckystiff.net/ruby/pickaxe/html/tut_classes.html#S4
Пример различия между Java и Ruby
Java
public class Main {
public static void main(String[] args) {
Main.A a1 = new A();
Main.A a2 = new A();
System.out.println(a1.foo(a2));
}
static class A
{
public String foo(A other_a)
{
return other_a.bar();
}
private String bar()
{
return "bar is private";
}
}
}
// Outputs
// "bar is private"
Ruby
class A
def foo other_a
other_a.bar
end
private
def bar
"bar is private"
end
end
a1 = A.new
a2 = A.new
puts a1.foo(a2)
# outputs something like
# in `foo': private method `bar' called for #<A:0x2ce9f44> (NoMethodError)
Вы могли бы реализовать это на C #, имея некоторый метод, способный перемещаться по стеку и проверять, какой объект является вызывающим, и генерировать исключение, если это не текущий класс. Не знаю, зачем вам это нужно, но я подумал, что брошу его там.
Основная причина, по которой ни один язык не поддерживает это на семантическом уровне, заключается в том, что различные потребности слишком различны, чтобы найти общий знаменатель, достаточно большой для такой функции. Скрытие данных уже достаточно плохо, и становится только хуже, когда вам требуется еще более детальный контроль.
У такого языка были бы преимущества, например, вы могли бы пометить определенные данные как частные для всех, кроме объекта которые его создали (пароли были бы отличным примером: даже код, запущенный в том же приложении, не мог бы их прочитать).
К сожалению, эта «защита» была бы поверхностной, поскольку на уровне ассемблера такой защиты не существовало бы. Чтобы быть эффективным, оборудование должно поддерживать его. В этом случае, вероятно, на уровне одного байта в ОЗУ. Это сделало бы такое приложение чрезвычайно безопасным и мучительно медленным.
В реальном мире вы найдете это в микросхеме TPM на своей материнской плате и, в очень грубом виде, в таблицах MMU процессора. Но это на уровне страницы 4K, а не на уровне байтов. Существуют библиотеки для обработки обоих, но это не считается "языковая поддержка" IMO.
Java имеет что-то подобное в форме Security API . Вы должны заключить рассматриваемый код в хранителя, который спрашивает текущий SecuityManager
, разрешен ли доступ или нет.
В Python вы можете добиться чего-то подобного с помощью декораторов (для методов и функций) или путем реализации __ setattr __
и __ getattr __
для доступа к полю.
В реальном мире вы найдете это в микросхеме TPM на вашей материнской плате и, в очень грубой форме, в таблицах MMU процессора. Но это на уровне страницы 4K, а не на уровне байтов. Существуют библиотеки для обработки обоих, но это не считается "языковая поддержка" IMO.
Java имеет что-то подобное в форме Security API . Вы должны заключить рассматриваемый код в хранителя, который спрашивает текущий SecuityManager
, разрешен ли доступ или нет.
В Python вы можете добиться чего-то подобного с помощью декораторов (для методов и функций) или путем реализации __ setattr __
и __ getattr __
для доступа к полю.
В реальном мире вы найдете это в микросхеме TPM на вашей материнской плате и, в очень грубой форме, в таблицах MMU процессора. Но это на уровне страницы 4K, а не на уровне байтов. Существуют библиотеки для обработки обоих, но это не считается "языковая поддержка" IMO.
Java имеет что-то подобное в форме Security API . Вы должны заключить рассматриваемый код в хранителя, который спрашивает текущий SecuityManager
, разрешен ли доступ или нет.
В Python вы можете добиться чего-то подобного с помощью декораторов (для методов и функций) или путем реализации __ setattr __
и __ getattr __
для доступа к полю.
Java имеет что-то подобное в форме Security API . Вы должны заключить рассматриваемый код в хранителя, который спрашивает текущий SecuityManager
, разрешен ли доступ или нет.
В Python вы можете добиться чего-то подобного с помощью декораторов (для методов и функций) или путем реализации __ setattr __
и __ getattr __
для доступа к полю.
Java имеет что-то подобное в форме Security API . Вы должны заключить рассматриваемый код в хранителя, который спрашивает текущий SecuityManager
, разрешен ли доступ или нет.
В Python вы можете добиться чего-то подобного с помощью декораторов (для методов и функций) или путем реализации __ setattr __
и __ getattr __
для доступа к полю.
В Java есть нечто подобное в форме API безопасности . Вы должны заключить рассматриваемый код в хранителя, который спрашивает текущий SecuityManager
, разрешен ли доступ или нет.
В Python вы можете добиться чего-то подобного с помощью декораторов (для методов и функций) или путем реализации __ setattr __
и __ getattr __
для доступа к полю.
В Java есть нечто подобное в форме API безопасности . Вы должны заключить рассматриваемый код в хранителя, который спрашивает текущий SecuityManager
, разрешен ли доступ или нет.
В Python вы можете добиться чего-то подобного с помощью декораторов (для методов и функций) или путем реализации __ setattr __
и __ getattr __
для доступа к полю.