Использование возвращаемого значения из функции powershell - PullRequest
0 голосов
/ 04 марта 2020
> function h2n($num) {return [int]$num.replace(",", "")}

> h2n("1,341,096") | get-member



   TypeName: System.Int32

Name        MemberType Definition
----        ---------- ----------
CompareTo   Method     int CompareTo(System.Object value), int CompareTo(int value), int IComparable.CompareTo(System.Object obj), int IComparable[int].Com... Equals      Method     bool Equals(System.Object obj), bool Equals(int obj), bool IEquatable[int].Equals(int other)
GetHashCode Method     int GetHashCode()
GetType     Method     type GetType()
GetTypeCode Method     System.TypeCode GetTypeCode(), System.TypeCode IConvertible.GetTypeCode()
ToBoolean   Method     bool IConvertible.ToBoolean(System.IFormatProvider provider)
ToByte      Method     byte IConvertible.ToByte(System.IFormatProvider provider)
ToChar      Method     char IConvertible.ToChar(System.IFormatProvider provider)
ToDateTime  Method     datetime IConvertible.ToDateTime(System.IFormatProvider provider)
ToDecimal   Method     decimal IConvertible.ToDecimal(System.IFormatProvider provider)
ToDouble    Method     double IConvertible.ToDouble(System.IFormatProvider provider)
ToInt16     Method     int16 IConvertible.ToInt16(System.IFormatProvider provider)
ToInt32     Method     int IConvertible.ToInt32(System.IFormatProvider provider)
ToInt64     Method     long IConvertible.ToInt64(System.IFormatProvider provider)
ToSByte     Method     sbyte IConvertible.ToSByte(System.IFormatProvider provider)
ToSingle    Method     float IConvertible.ToSingle(System.IFormatProvider provider)
ToString    Method     string ToString(), string ToString(string format), string ToString(System.IFormatProvider provider), string ToString(string format, ... ToType      Method     System.Object IConvertible.ToType(type conversionType, System.IFormatProvider provider)
ToUInt16    Method     uint16 IConvertible.ToUInt16(System.IFormatProvider provider)
ToUInt32    Method     uint32 IConvertible.ToUInt32(System.IFormatProvider provider)
ToUInt64    Method     uint64 IConvertible.ToUInt64(System.IFormatProvider provider)


> h2n("1,341,096")  * 0
1341096

Почему последнее выражение не возвращает 0?

1 Ответ

1 голос
/ 04 марта 2020

Вы можете ввести [int](h2n('1,341,096')) * 0 при вызове вашей функции.

Как указывалось выше, комментатор должен ввести (h2n '1,341,096') * 0.

Причина в том, что в Powershell, вы не вводите аргументы функции в скобках при вызове функции в оболочке. Вместо этого вы используете синтаксис терминального стиля и разделяете аргументы пробелами без скобок.

Так что же происходит, когда вы вводите h2n('1,341,096') * 0? Он выполняет этот вызов функции:

(h2n '1,341,096' * 0)

, который только что передал 3 параметра в вашу функцию, первый из которых - 1 341 096, второй - *, а третий - 0. Это определенно не то, что вы хотите.

Это было бы функциональным эквивалентом выполнения h2n('1,341,096', *, 0); на обычном языке программирования.

Вместо этого вы вызываете свою функцию с пробелом, подобным h2n '1,341,096', а затем вы заключите его в скобки, чтобы вы могли использовать его во встроенном выражении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...