2015-01-21 13 views
3

Я знаю, я знаю. «Какое новое состояние?», Спросите вы. Ну, позвольте мне показать вам:Как включить состояние новой строки слова в Rebol?

append [] w: first new-line [hello] on 
== [ 
    hello 
] 

W является теперь слово, которое создает новую строку, когда добавляется к блоку.

Вы можете отключить его, например, таким образом, в Rebol 3:

append [] to word! w 
== [hello] 

Но я не нашел хороший способ, чтобы включить его. Можете ли вы, ребол гуру?

Разъяснение: Я ищу некоторые «F такие, что:

append [] f to word! "hello" 

имеет новую строку в нем.

+0

Я могу не наблюдайте в Rebol2 то, что вы описываете. ** добавить [] в слово! w ** по-прежнему дает тот же блок с включенным маркером новой строки. – sqlab

+0

Извините. Обновлено. Вы можете попробовать «добавить [] в слово! нанизывать! w' в Rebol 2. – MarkI

ответ

2

По-видимому, состояние новой строки присваивается слову в зависимости от того, имеет ли присвоенное значение значение предыдущую новую строку во время присвоения (я буду размышлять над правильностью этого оператора на некоторое время).

Эта функция перераспределяет то же значение (должен сохранить контекст) на слово с новым состоянием новой строки:

set-new-line: func [ 
    'word [word!] 
    state [logic!] 
][ 
    set/any word first new-line reduce [get/any word] state 
] 

Мы также можем проверить состояние новой строки данного слова:

has-new-line?: func [ 
    'word [word!] 
][ 
    new-line? reduce [get/any word] 
] 

При использовании:

>> x: "Foo" 
== "Foo" 

>> has-new-line? x 
== false 

>> reduce [x] 
== ["Foo"] 

>> set-new-line x on 
== "Foo" 

>> has-new-line? x 
== true 

>> reduce [x]   
== [ 
    "Foo" 
] 

>> reduce [set-new-line x on set-new-line x off set-new-line x on] 
== [ 
    "Foo" "Foo" 
    "Foo" 
] 
  • должны работать в и

  • , кажется, работает в v0.6.1 с одной оговоркой: new-line?, кажется, всегда возвращать true

+0

это не работает, если x является блоком слова, как в вопросе – sqlab

+0

@sqlab В вопросе слово ** hello ** не содержит состояние новой строки, это слово ** x **. Вы ничего не можете сделать, чтобы ** приветствовать **, чтобы изменить состояние. Вы можете сделать ** для строки! **, но затем ** привет ** - это совершенно новое слово без того же контекста. – rgchris

+0

Есть два пути, которые я вижу, чтобы интерпретировать вопрос: как я его вижу, я обратился к более вероятным: ** w: первая новая строка [привет] на set-new-line w off append [] w ** другой будет более прямым, но на самом деле не отвечает на вопрос: ** new-line append [] w: first new-line [hello] on off ** – rgchris

2

Чтобы ответить на исходный вопрос (который я знаю , потому что я спросил его, в другом воплощении):

+0

Плохая форма попросить помощника. если ваш ответ будет полезен, он получит свои голоса – TheRealMrCrowley