Следующая строка должна быть добавлена к передаваемому объекту $ http:
headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}
И переданные данные должны быть преобразованы в строку с кодировкой URL:
> $.param({fkey: "key"})
'fkey=key'
Итак, у вас есть что-то вроде:
$http({
method: 'POST',
url: url,
data: $.param({fkey: "key"}),
headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}
})
От: https://groups.google.com/forum/#!msg/angular/5nAedJ1LyO0/4Vj_72EZcDsJ
Чтобы использовать новые сервисы, добавленные с помощью AngularJS V1.4, см.
Это работает только в Scala 2.8, но действительно работает:
scala> def pythagoras[T](a: T, b: T, sqrt: T => T)(implicit n: Numeric[T]) = {
| import n.mkNumericOps
| sqrt(a*a + b*b)
| }
pythagoras: [T](a: T,b: T,sqrt: (T) => T)(implicit n: Numeric[T])T
scala> def intSqrt(n: Int) = Math.sqrt(n).toInt
intSqrt: (n: Int)Int
scala> pythagoras(3,4, intSqrt)
res0: Int = 5
В более общем плане черта Числовой
фактически является справочником о том, как решить этот тип проблемы. . См. Также Заказ
.
Самый очевидный путь:
type Num = {
def +(a: Num): Num
def *(a: Num): Num
}
def pyth[A <: Num](a: A, b: A)(sqrt: A=>A) = sqrt(a * a + b * b)
// usage
pyth(3, 4)(Math.sqrt)
Это ужасно по многим причинам. Во-первых, у нас есть проблема рекурсивного типа, Num
. Это только позволяется при компиляции этого кода с -Xrecursive
набор опции к некоторому целочисленному значению (5, вероятно, более, чем достаточно для чисел). Во-вторых, тип Num
структурен, что означает, что любое использование участников, которых это определяет, будет скомпилировано в соответствующие отражающие вызовы. Помещая его мягко, эта версия pyth
неприлично неэффективна, работая на порядке нескольких сто тысяч в 1116 раз медленнее, чем стандартная реализация. Нет никакого пути вокруг структурного типа хотя, если Вы хотите определить pyth
для [1 117] какой-либо тип, который определяет +
, *
и для которого там существует sqrt
функция.
Наконец, мы приходим к наиболее основному решению: это сверхсложно. Почему беспокойство, реализовывая функцию таким образом? В сущности единственные типы, к которым это должно будет когда-либо относиться, являются реальными числами Scala. Таким образом является самым легким только сделать следующее:
def pyth(a: Double, b: Double) = Math.sqrt(a * a + b * b)
Все проблемы решены! Эта функция применима на значениях типа Double
, Int
, Float
, даже нечетных как [1 113] благодаря чудесам неявного преобразования. В то время как это верно, что эта функция технически менее гибка, чем наша структурно введенная версия, это значительно более эффективно и чрезвычайно более читаемо. Мы, возможно, потеряли способность вычислить теорему Pythagrean для непредвиденных типов, определяющих +
и *
, но я не думаю, что Вы собираетесь пропустить ту способность.
Есть метод в java.lang.Math:
public static double hypot (double x, double y)
для которого javadocs утверждает:
Возвращает sqrt(x2 +y2) без промежуточного переполнения или недополнения.
заглянув в src.zip, Math.hypot использует StrictMath, который является родным методом:
public static native double hypot(double x, double y);
Некоторые мысли по поводу ответа Дэниела:
Я экспериментировал , чтобы обобщить Числовой
в Реальный
, что было бы более подходящим для этой функции, чтобы обеспечить функцию sqrt
. Это приведет к следующему:
def pythagoras[T](a: T, b: T)(implicit n: Real[T]) = {
import n.mkNumericOps
(a*a + b*b).sqrt
}
Сложно, но возможно использовать буквальные числа в таких универсальных функциях.
def pythagoras[T](a: T, b: T)(sqrt: (T => T))(implicit n: Numeric[T]) = {
import n.mkNumericOps
implicit val fromInt = n.fromInt _
//1 * sqrt(a*a + b*b) Not Possible!
sqrt(a*a + b*b) * 1 // Possible
}
Выведение типа работает лучше, если sqrt
передается во втором списке параметров.
Параметры a
и b
будут передаваться как объекты, но @specialized может это исправить. К сожалению, математические операции по-прежнему будут сопряжены с некоторыми накладными расходами.
Вы можете почти обойтись без импорта mkNumericOps. Я дошел до ужасно близко!