Я понимаю, что у вас месяц является целочисленным значением, а не объектом даты. Фильтр даты работает только с форматированной датой или миллисекундой как строки, миллисекунды как целое число или объект Date
.
Таким образом, вам нужно преобразовать целочисленное значение этого месяца во что-то, что понимает фильтр. Вы можете взять целочисленное значение месяца и сделать его нулевым, а затем создать из него новый фиктивный объект Date
, а затем применить к нему фильтр Date
.
Контроллер:
angular.module('demo', [])
.controller('DemoCtrl', function($scope) {
// here's the original value
$scope.month = 0; // 0 for january, 11 for december
// watch for changes to the value of month. turn it into a new date object that angular can bind and filter in the view
$scope.$watch('month', function(val) {
// note: if you are expecting the month value to be one-indexed, you'll need to subtract 1 from val to make it zero-indexed as Date expects
$scope.date = new Date(2014, val);
});
});
Просмотр:
{{ date | date:'MMMM' }}
Другой вариант - использовать сервис $filter
напрямую, если вам нужен более прямой способ преобразования значения. Вы делаете в основном то же самое, просто форматируя значение в контроллере, а не в представлении.
Контроллер:
// Code goes here
angular.module('demo', [])
.controller('DemoCtrl', function($scope, $filter) {
// here's the original value
$scope.month = 0;
// watch for changes to the value of month, and then format it directly
$scope.$watch('month', function(val) {
$scope.date = $filter('date')(new Date(2014, val), 'MMMM');
});
});
Просмотр:
{{ date }}
Если вы используете
let s = Console.ReadLine
, вы создаете только делегат, который указывает на функцию ReadLine. Вам нужно сказать
let s = Console.ReadLine()
, чтобы фактически выполнить функцию. Это похоже на синтаксис C #, за исключением того, что вывод типа означает, что вы не получаете предупреждения компилятора.
Что вы имеете в виду, говоря «это не соблюдается»? Вот небольшое консольное приложение, которое я только что написал на VS2010b1, и оно отлично работает:
open System
let line = Console.ReadLine()
Console.WriteLine("You wrote {0}", line)
// Just to make it pause
let unused = Console.ReadLine()
Вы пытаетесь запустить код из F # Interactive в Visual Studio? Если да, то это может быть проблемой, как объясняет сообщение Брайана.
Однако я не видел такой же проблемы при использовании F # Interactive из командной строки. Вот полная стенограмма сеанса:
Microsoft F# Interactive, (c) Microsoft Corporation, All Rights Reserved
F# Version 1.9.6.16, compiling for .NET Framework Version v4.0.20506
Please send bug reports to fsbugs@microsoft.com
For help type #help;;
> open System;;
> let line = Console.ReadLine();;
Hello world
val line : string = "Hello world"
Выполнение кода цикла Брайана из F # Interactive не показало той же проблемы.
Итог: Похоже, что это не работает в F # Interactive в Visual Studio, но не при интерактивном запуске из командной строки или в полном консольном приложении.
У меня нет под рукой блока Beta1, но я знаю, что в прошлом у нас была ошибка, из-за которой ReadLine () мог видеть фоновые команды, которые взаимодействуют между интерактивным пользовательским интерфейсом и фоновый процесс, запускающий ваш код F #. Может быть интересно исследовать, что печатает
let Foo max =
let rec Loop i =
if i < max then
let line = System.Console.ReadLine()
printfn "line = %s" line
Loop (i+1)
Loop 1
Foo 12
, когда вы выделяете это и «Отправить в интерактивный режим». Думаю, возможно, вы увидите несколько неожиданных интересных строк, за которыми следуют строки, которые вы вводите в окно.